Lazy Expiration
memcached 内部不会监视记录是否过期,而是在 get 时查看记录的时间戳,检查记录是否过期。这
种技术被称为 lazy(惰性)expiration。因此,memcached 不会在过期监视上耗费 CPU 时间。
LRU( Least Recently Used 最近少使用):
从缓存中有效删除数据的原理
memcached 优先使用已超时的记录的空间,但即使如果也会发生空间不够用的情况,这时就要用LRU策略进制进行空间分配
从最近未被使用的记录中搜索,并将空间分配给新的记录
指定 -M 参数禁用LRU,内存写满后会返回错误 memcached 毕竟不是存储器,而是缓存,所以推荐使用 LRU
分布式算法:
memcached的分布式算法是在客户端实现的,当一个key确定的时候也就确定了他要存储的mc节点
算法:crc32(key)/n key为要缓存的键,n为链接的服务器节点数
优点:余数计算的方法简单,数据的分散性也相当优秀
缺点:当添加或移除服务器时,余数就会产生巨变,从而影响缓存的命中率。
解决方案:
一致性 hash 算法(Consistent Hashing)
首先计算出节点的hash值,分布到 0~2^32的园上,然后用同样的方法求出存储数据的键的hash值,并映射到圆上
从映射位置开始顺时针开始查找,首次遇到的服务器则为要存储的节点,如果超过后仍找不到则放到 第一台节点上
采用这种算法,当增加或减少服务器时只有很少的部分key会受到影响
虚拟节点:当节点数非常少时,分布会不均匀,可以把节点放大几百倍,然后一个节点对应多个虚拟虚拟解决,会达到同样的效果
Memcached、Key-Value Store 、Bittorrent DHT、LVS中都采用了Consistent Hashing算法
http://blog.csdn.net/sparkliang/article/details/5279393
todo