Memcache学习笔记(5)- memcache内存模型

1. memcache的是采用Slab Allocation的机制分配和管理内存的。其基本原理就是按照预先规定的大小,将分配的内存分割成特定长度的块,用以解决内存碎片问题。但由此也引来了内存浪费的问题。

2. Slab Allocation将分配的内存分割成各种尺寸的块(chunk),并把尺寸相同的chunk分成chunks组。如下图所示。

3. memcache分配的内存不会回收,会被重复利用。

4. Slab Allocation术语:

Page:

分配给slab的内存空间,默认是1M,分配给slab之后根据slab的大小切分成chunk。

Chunk:

用于缓存记录的内存空间。

Slab Class:

特定大小的chunk组。

5. Slab中缓存记录的原理

memcache会根据接收的客户端的数据的大小,选择最适合数据大小的slab。memcache中保存着slab中的空闲chunk的列表,根据该列表选择chunk,将数据缓存其中。如下图所示:

6.Slab Allocation机制的缺点:

由于内存的分配是按特定长度进行分配的,所以无法有效利用内存。例如100B的数据只能缓存到128B的chunk中,剩余的28B就浪费了。如下图所示:

目前还没有完美的解决方案。但是如果预先知道数据的公用大小或者存储相同大小的数据,就可以预先定义适合大小的chunk组,减少内存浪费。


另外,

1. memcache删除数据的原理是采用LRU算法,可以通过-M 命令参数禁止LRU。

2. memcache不会释放已经申请的内存,而是对内存进行复用。

3. memcached内部不会监视记录是否过期,而是在get时查看记录的时间戳,因此,memcached不会在过期监视上耗费CPU时间,被称为Lazy expiration。

4. memcache文本协议下,key的最大长度是250字节;二进制协议下,理论是2e16即65536字节。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值