Memcached内存分配机制—— Slab Allocator

Memcached采用Slab Allocator进行内存管理,将内存划分为slab块,每个slab由固定大小的page组成,page再拆分为chunk。根据数据大小分配合适的chunk,若数据大小不匹配chunk,可能导致内存浪费。数据存储时,通过快速定位slab class,查找可用chunk,使用LRU策略处理内存不足的情况。过期机制为懒惰过期,删除操作做标记并放入回收空间。
摘要由CSDN通过智能技术生成

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内存简图如下:
图里面1.25就是增长因子。

Memcached数据存储过程
- 在Memcached中每一个需要存储的数据(对象)称为一个Item。每存储一个数据就是为一个Item分配内存的过程。过程如下:
1.快速定位 slab classid, 计算Item的大小,item大小 = key键长 + flag + suffx(16字节) + va

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值