基于libenvent网络库,单线程,中心思想IO多路复用,http://www.cnblogs.com/daoluanxiaozi/p/3274925.html
特点:
1.基于键值对的缓存系统,储存字符串或者对象(需要实现serializable接口),协议简单,
基于libevnent网络库,内置的内存管理, slab allocations,基于客户端的分布式;
memcached间互不通信,//分布式靠客户端实现,-f 块大小增长因子
内置的内存管理: memcached使用预申请内存并分组成特定块的方式,旨在解决内存碎片的问题。
数据存储方式:slab allocations,有效的防止内存碎片,但会产生内存浪费
数据过期方式:Lazy Expiration + LRU
不会监控数据是否过去,get查看数据时间戳进行判断
3.分配的内存用完,使用LRU算法 least recently Used
4.支持cas操作,,set,add,replace,prepand,appand
incr,decr
5.cas和gets配合使用
30天,内存最大2G,存储最大1MB
客户端指定分布式hash算法,
通过stats指令,查看缓存命中率
6.一致性hash算法,添加或减少服务器,减少key的重新映射
原理:将Hash函数的值域空间形成一个hash圆,服务器映射到圆上,整个圆按照顺时针方向组织
,然后使用相同的hash函数,计算出key的hash值并映射到圆上,按照顺时针方向,找到最近的服务器进行存储; 通过虚拟节点,避免服务器分部不均匀;
6.分布式session
Memcache的管理与性能监控:
可以通过命令行直接管理与监控也可通过nagios,cacti等web软件进行监控命令行:-
- Shell>telnet 127.0.0.1 1211 //如果在启动时指定了IP及端口号,这里要作相应改动连接成功后命令
- Stats:统计memcached的各种信息
- Stats reset:重新统计数据
- Stats slabs,显示slabs信息,可以详细看到数据的分段存储情况
- Stats items:显示slab中的item数目
- Stats cachedump 1 0:列出slabs第一段里存的KEY值
- Set|get:保存或获取数据
- STAT evictions 0:表示要腾出新空间给新的item而移动的合法item数目