Memcached原理分析

本文介绍了Memcached的Slab Allocation内存管理机制,包括Page、Chunk及SlabClass等概念,详细阐述了缓存记录的过程及数据过期、删除机制。此外还探讨了Memcached如何通过客户端实现分布式缓存。

Memcached的内存管理方式

Memcached采用了名为Slab Allocation的机制分配,管理内存。

Slab Allocation的原理相当简单。将分配的内存分割成各种尺寸的块(chucnk),并把尺寸相同的块分成组(chucnk的集合)如图:



而且slab Allocation还有重复使用已分配内存的目的。也就是说,分配到的内存不会释放,而是重复利用。
Slab Allocation 的主要术语

  • Page :分配给Slab 的内存空间,默认是1MB。分配给Slab 之后根据slab 的大小切分成chunk.
  • Chunk : 用于缓存记录的内存空间。
  • Slab Class:特定大小的chunk 的组。

 

在Slab 中缓存记录的原理

Memcached根据收到的数据的大小,选择最合适数据大小的Slab (图2) memcached中保存着slab内空闲chunk的列表,根据该列表选择chunk,然后将数据缓存于其中。

 

 

Memcached在数据过期与删除

Memcached内部不会监视记录是否过期,而是在get此条记录时查看其时间戳,检查记录是否过期。这种技术称为lazy expiration.因此memcached不会再过期监视上耗费CPU时间。

添加新数据时,Memcached会优先使用已超时的记录空间,如果空间不足,此时就要使用名为Least Recently Used (LRU最近最少使用)机制来分配空间。因此当memcached的内存空间不足时(无法从slab class)获取到新空间时,就从最近未使用的记录中搜索,并将空间分配给新的记录。

 

Memcached的分布式原理

Memcached是通过客户端来实现分布式的,以新数据(键值对)的键通过一定的算法选择一个服务器,保存在此服务器的Memcached中。

例如:

向memcached中添加“tokyo”。将“tokyo”传给客户端程序库后,客户端实现的算法就会根据“键”来决定保存数据的memcached服务器。服务器选定后,即命令它保存“tokyo”及其值。同样,“kanagawa”“chiba”“saitama”“gunma”都是先选择服务器再保存。接下来获取保存的数据。获取时也要将要获取的键“tokyo”传递给函数库。函数库通过与数据保存时相同的算法,根据“键”选择服务器。使用的算法相同,就能选中与保存时相同的服务器,然后发送get命令。只要数据没有因为某些原因被删除,就能获得保存的值。

 
这样,将不同的键保存到不同的服务器上,就实现了memcached的分布式。 memcached服务器增多后,键就会分散,即使一台memcached服务器发生故障无法连接,也不会影响其他的缓存,系统依然能继续运行。

 

http://www.cnblogs.com/sunniest/p/4437806.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值