memcached LRU队列状态转换
2015-07-28 21:20
495 查看
我们假设memcached开启了 lru_maintainer_thread线程,这时将使用HOT_LRU, WARM_LRU, COLD_LRU, NOEXP_LRU四种队列。
1. 从内存池中新分配的item,将其放入HOT_LRU队列。
2. HOT_LRU队列中数据量超过阀值,则转移到COLD_LRU队列。
3. WARM_LRU队列中数据量超过阀值,则转移到COLD_LRU队列。
4. 如果COLD_LRU队列中数据被访问过,则转移到WARM_LRU队列。
5. 如果HOT_LRU或WARM_LRU队列中数据被访问过,则移到WARM_LRU队列的首部。
6. 当从内存池中分配item时,如果item未设置exptime并且程序配置为“不踢掉exptime为0的数据”,就将其放入NOEXP_LRU队列。这个队列中的数据不会被踢掉,也不会迁移到其他队列。
7. 如果“当内存不够用时允许踢数据”,则COLD_LRU中的数据会被回收到内存池。
7,8,9 还有可能是item直接被删除掉,例如数据过期,执行delete操作,执行flush all操作。
如果程序允许”踢掉exptime为0的数据“,那么没有6号线,所以exptime为0的数据也将进入其他状态转换。
1. 从内存池中新分配的item,将其放入HOT_LRU队列。
2. HOT_LRU队列中数据量超过阀值,则转移到COLD_LRU队列。
3. WARM_LRU队列中数据量超过阀值,则转移到COLD_LRU队列。
4. 如果COLD_LRU队列中数据被访问过,则转移到WARM_LRU队列。
5. 如果HOT_LRU或WARM_LRU队列中数据被访问过,则移到WARM_LRU队列的首部。
6. 当从内存池中分配item时,如果item未设置exptime并且程序配置为“不踢掉exptime为0的数据”,就将其放入NOEXP_LRU队列。这个队列中的数据不会被踢掉,也不会迁移到其他队列。
7. 如果“当内存不够用时允许踢数据”,则COLD_LRU中的数据会被回收到内存池。
7,8,9 还有可能是item直接被删除掉,例如数据过期,执行delete操作,执行flush all操作。
如果程序允许”踢掉exptime为0的数据“,那么没有6号线,所以exptime为0的数据也将进入其他状态转换。
相关文章推荐
- PHP实现的memcache环形队列类实例
- windows下memcached安装以及php_memcache.dll扩展
- linux下安装php扩展memcache的方法
- memcached 线程总结
- Nginx + MySQL + PHP + Xcache + Memcached
- redis做DB缓存mysql做冗余数据库,memcached主备存储session下的集群高可用方案
- PHP中memcached的使用
- Memcached简介
- PHP实现的memcache环形队列类实例
- Memcached实现内存缓存(一)
- memcache操作
- 【飞天奔月出品】memcached四大注意事项(key长度,空格限制,最大item)
- Memcached 群集高可用性(HA)架构
- xmemcached net.rubyeye.xmemcached.exception.UnknownCommandException
- 用Varnish和Memcached缓存给WordPress网站提速-内存级加速
- Memcached Java使用
- win7下安装memcache
- 百度地图sdk接入报错:com.baidu.platform.comjni.map.commonmemcache.JNICommonMemCache.Create:()J
- 为什么不能用memcached存储Session?
- 为什么不能用memcached存储Session?