memcached实战系列(六)理解Memcached的数据存储方式

时间:2022-04-20 16:06:05

Memcached的数据存储方式被称为Slab Allocator,其基本方式是:

1:先把内存分成很多个Slab,这个大小是预先规定好的,以解决内存碎片的问题。启动参数的时候配置进去的不懂得可以参考memcached启动参数配置章节。

分配给Slab的内存空间被称为Page,默认是1M。一个Slab下可以有多个Page。

2:然后把一个Page分成很多个chunk块,chunk块是用于缓存记录的空间。Chunk的

大小是先有一个基本值,然后根据增长因子来增大。每一个page中chunk是相等的空间大小。

3:slab class:内存区类别(48byte-1M),每个类别有一个slab classId,图左边的,类似索引方便管理记录。

4:Memcached里面保存着slab内空闲的chunk列表,当收到要保存的item的时候,它

会根据item的大小,去选择一个最合适的slab,然后找到空闲的chunk,把数据存放进去。

比如我们存放120字节的值,有个chunk值为100还有一个chunk是130,存到100的chunk是没有足够空间存储的,存储到130这个chunk是可以的,最近的原则存储。但是存储到130chunk里面,也有一个问题就是浪费了10字节内存。所以合理的分配空间也是很重要的。

memcached实战系列(六)理解Memcached的数据存储方式

启动的时候添加参数:-vv注意小写的不是大写的。

./memcached -d -m 10 -u root -l 0.0.0.0 -p 18887-c 256 -P /tmp/memcached.pid -vv

如下图所示:

memcached实战系列(六)理解Memcached的数据存储方式

上面的图也印证了前面说的原理。确实是这样分配的。