您的位置:首页 > 数据库 > Memcache

memcache内存回收机制

2016-07-19 23:22 471 查看
1. salb allocation分配机制:

每个slab被划分成多个page,每个page又被划分为多个chunk。每个slab实际上是相同尺寸的chunk的集合。

memcache会根据存储数据的大小,选择最合适数据大小的slab进行存储。而如果这时候所有内存都被占用了,并且指定了执行LRU算法,那么最近时间段内最少使用的同规格的chunk会被重写。这可能就会导致命中率下降。

memcache的chunk分配可以指定一个growth factor,用于当前slab都不适合存储的情况下,创建新的slab。计算的方式:新的chunk大小 = (当前最大size的chunk) * factor。

memcache这种分配机制会导致:内存利用率不高。因为固定大小的chunk无法做到存储严格相等的value值。

2. memcache内存回收机制

memcache不释放内存,而是重新利用。

memcache是一个lazy的删除模式,需要新的对象请求入驻这个chunk或者过期的对象被get的时候才会清除。LRU算法会将过期的chunk先删除掉。

3. memcache lru算法

每个slab会维护一个队列,刚插入的数据在队头,经常get的数据也会移动到队头,这样较老或者访问较少的数据相对都留在队尾。该算法从队尾开始淘汰。当slab分配不到足够的内存时,首先会检查队尾是否有过期数据。如果有的话会直接将其覆盖为新的对象,如果没有,会开始淘汰队尾的对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  memcache