Memcached采用了名为Slab Allocation的机制分配,管理内存。算法
Slab Allocation的原理至关简单。将分配的内存分割成各类尺寸的块(chucnk),并把尺寸相同的块分红组(chucnk的集合)如图:
并且slab Allocation还有重复使用已分配内存的目的。也就是说,分配到的内存不会释放,而是重复利用。
Slab Allocation 的主要术语缓存
Memcached根据收到的数据的大小,选择最合适数据大小的Slab (图2) memcached中保存着slab内空闲chunk的列表,根据该列表选择chunk,而后将数据缓存于其中。服务器
Memcached内部不会监视记录是否过时,而是在get此条记录时查看其时间戳,检查记录是否过时。这种技术称为lazy expiration.所以memcached不会再过时监视上耗费CPU时间。分布式
添加新数据时,Memcached会优先使用已超时的记录空间,若是空间不足,此时就要使用名为Least Recently Used (LRU最近最少使用)机制来分配空间。所以当memcached的内存空间不足时(没法从slab class)获取到新空间时,就从最近未使用的记录中搜索,并将空间分配给新的记录。memcached
Memcached是经过客户端来实现分布式的,以新数据(键值对)的键经过必定的算法选择一个服务器,保存在此服务器的Memcached中。函数
例如:spa
向memcached中添加“tokyo”。将“tokyo”传给客户端程序库后,客户端实现的算法就会根据“键”来决定保存数据的memcached服务器。服务器选定后,即命令它保存“tokyo”及其值。一样,“kanagawa”“chiba”“saitama”“gunma”都是先选择服务器再保存。接下来获取保存的数据。获取时也要将要获取的键“tokyo”传递给函数库。函数库经过与数据保存时相同的算法,根据“键”选择服务器。使用的算法相同,就能选中与保存时相同的服务器,而后发送get命令。只要数据没有由于某些缘由被删除,就能得到保存的值。blog
这样,将不一样的键保存到不一样的服务器上,就实现了memcached的分布式。 memcached服务器增多后,键就会分散,即便一台memcached服务器发生故障没法链接,也不会影响其余的缓存,系统依然能继续运行。内存