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分配不到足够的内存时,首先会检查队尾是否有过期数据。如果有的话会直接将其覆盖为新的对象,如果没有,会开始淘汰队尾的对象。
每个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缓存mysql数据库操作的原理和缓存过程浅析
- PHP memcache扩展的三种安装方法
- PHP模块 Memcached功能多于Memcache
- Memcache 基础教程(php 缓存)
- 配置Memcache服务器并实现主从复制功能(repcached)
- php模块memcache和memcached区别分析
- windows环境下memcache配置方法 详细篇
- 批量获取memcache值并按key的顺序返回的实现代码
- Linux服务器中对于Memcache的安装配置方法
- PHP操作Memcache实例介绍
- 用PHP写的基于Memcache的Queue实现代码
- ubuntu 编译安装php 5.3.3+memcache的方法
- PHP中的Memcache详解
- 在telnet下操作memcache详解(操作命令详解)
- 在Mac OS的PHP环境下安装配置MemCache的全过程解析
- Memcache缓存系统知识点梳理
- win7下memCache的安装过程(具体操作步骤)
- 采用memcache在web集群中实现session的同步会话
- php扩展memcached和memcache的安装配置方法