Memcached数据存储方式
Memcached的内存数据存储方式被称为 Slab Allocator(对象缓存分配)。采取的思想可以理解为化整为零。就是将内存进行多层次的拆分,达到对对象和内存进行最精准的管理。拆分如下:
- 先把内存拆分成很多个slab块。每个slab的大小都可以预先设置。上一篇文章中有对应的参数列表。
- slab的内存空间称为ipage,每个page的大小默认是1M,可以在启动的时候参数l指定page的大小。把每个page的内存拆分成多个大小相等chunk内存块,数据就存储在各个chunk中。
- chunk的大小也是预先设置的。Memcached中有一个增长因子,chunk可以根据这个增长因此增大。
- slab class 这个等于slab的索引ID。 每一个slab对应着一个slab classId。
Memcached内存简图如下:
Memcached数据存储过程
- 在Memcached中每一个需要存储的数据(对象)称为一个Item。每存储一个数据就是为一个Item分配内存的过程。过程如下:
1.快速定位 slab classid, 计算Item的大小,item大小 = key键长 + flag + suffx(16字节) + va