memcache 内部原理实现

 

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分布式

 

todomemcached

相关文章
相关标签/搜索