Memcached原理分析_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > Memcached原理分析

Memcached原理分析

 2015/4/18 19:26:46  Sunnier  程序员俱乐部  我要评论(0)
  • 摘要:Memcached的内存管理方式Memcached采用了名为SlabAllocation的机制分配,管理内存。SlabAllocation的原理相当简单。将分配的内存分割成各种尺寸的块(chucnk),并把尺寸相同的块分成组(chucnk的集合)如图:而且slabAllocation还有重复使用已分配内存的目的。也就是说,分配到的内存不会释放,而是重复利用。SlabAllocation的主要术语Page:分配给Slab的内存空间,默认是1MB
  • 标签:分析

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服务器发生故障无法连接,也不会影响其他的缓存,系统依然能继续运行。

上一篇: 面试题整理:C#(一) 下一篇: 没有下一篇了!
发表评论
用户名: 匿名