在具体介绍 Memcached 内存管理的源码实现之前,我们先介绍一些 Memcached 内存管理的重要概念。
- Slab
Slab 是 Memcached 中分配的一块内存,默认大小是 1M。Slab 是 Memcached 内存分配的最小单位。 - Chunk
Slab 是 Memcached 中分配的最小单位,而每一个 Slab 又会进一步划分成一个个的 Chunk。Chunk 是 Memcached 存储数据的最小单元,一个 Chunk 只能存储一个对象。同时,一个 Slab 中所有的 Chunk 的大小是相同的。 - Item
Item 是 Memcached 中存储的实际数据。Item 本身是一个复杂的数据结构,其中除了包含对象的 Key-Value 键值对,过期时间外,还有其他一些数据结构,稍后会具体介绍。Memcached 将 Item 保存对应的 Slab 的某个 Chunk 中。 - SlabClass
通过上面几个概念的介绍,我们知道 Memcached 通过分配 Slab 并把 Slab 划分成等大小的 Chunk 来进行存储。那么不同的 Item 大小数据应该如何存储呢?SlabClass 把 Slab 划分成不同大小的组合,每一个 SlabClass 对应一种 Slab,在同一个 SlabClass 中所有的 Slab 都划分成相同大小的 Chunk。
这里举一个还算比较形象的列子。Memcached 的内存分配可以类比与我们上学时代的写字本。Slab 相当于写字本的一页,Chunk 相当于写字本一页中的一个个写字格子,Item 相当于我们要写的字,而 SlabClass 相当于一个写字本。所以每一个写字本中的格子大小都是相同的,我们要写不同的字,只需要找最符合该字大小的写字本就可以了。
作者:吕宗胜 ZJU
链接:https://www.jianshu.com/p/7a8b85c86ab4
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。