共计 1596 个字符,预计需要花费 4 分钟才能阅读完成。
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 服务器发生故障无法连接,也不会影响其他的缓存,系统依然能继续运行。
Memcached 安装及启动脚本 http://www.linuxidc.com/Linux/2013-07/87641.htm
PHP 中使用 Memcached 的性能问题 http://www.linuxidc.com/Linux/2013-06/85883.htm
Ubuntu 下安装 Memcached 及命令解释 http://www.linuxidc.com/Linux/2013-06/85832.htm
Memcached 的安装和应用 http://www.linuxidc.com/Linux/2013-08/89165.htm
使用 Nginx+Memcached 的小图片存储方案 http://www.linuxidc.com/Linux/2013-11/92390.htm
Memcached 使用入门 http://www.linuxidc.com/Linux/2011-12/49516p2.htm
Memcached 的详细介绍 :请点这里
Memcached 的下载地址 :请点这里
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2015-06/118830.htm