博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
memecache过期策略
阅读量:7072 次
发布时间:2019-06-28

本文共 1483 字,大约阅读时间需要 4 分钟。

hot3.png

惰性删除+LRU淘汰

memcache的LRU原理: 当某个单元被请求时,维护一个计数器,通过计数器来判断最近谁最少被使用。 

注: 即使某个key 是设置的永久有效期,也一样会被踢出来! 

memcache使用slab allocator机制来内存管理。 

slab allocator原理:先将内存划分为多个slab class仓库,每个仓库切分成不同尺寸的小块chunk。 
需要存储内容时候,判断内容大小,为其选择合理的仓库。

memcached 在启动时可以通过f选项指定Growth Factor 因子, 并在某种程度上控制slab 之间的差异.即各个chunk块的大小比例。

现在有114byte内存需要存放,首先memcache会检查chunk组,找到内容大于114byte且二则差的绝对值最小的那个chunk(假设是128)。如果此时128chunk已经用完,此时并不会去使用更大当的chunk,而是将chunk为128里面的旧数据踢掉,以备使用。

http://blog.csdn.net/hsd2012/article/details/51464847

 

一个Slab会有多个Page,一个page默认是1M,启动Memcached会预分配1M,当1M的数据满之后,如果有新数据进来,那么会重新分配一个Page给这个slab,但是Memcached是有内存上限的,如果不能申请Page的话,这时候就要针对这个Slab再利用LRU算法剔除掉最近最少使用的数据了。

1,Memcached的LRU算法针对每个Slab执行,而不是针对整体。 

2,数据只会存在指定的Slab中,即使该Slab已经满了,而且更大的Slab有空间,这种情况会在指定的Slab执行LRU算法,因为数据不会被存放到更大的Slab中。

过期的数据如果没被显式调用get,也要占用空间。因为LRU是针对双向链表前面的数据,每个Slab由两个指针来维护该双向链表,即heads和tails指针,分别指向最老的数据和最新的数据。这就可能导致没有过期的数据被踢。

http://blog.csdn.net/qianshangding0708/article/details/47980697

 

Memcached的LRU几种策略

1. 惰性删除。memcached一般不会主动去清除已经过期或者失效的缓存,当get请求一个item的时候,才会去检查item是否失效。

2. flush命令。flush命令会将所有的item设置为失效。

3. 创建的时候检查。Memcached会在创建ITEM的时候去LRU的链表尾部开始检查,是否有失效的ITEM,如果没有的话就重新创建。

4. LRU爬虫。memcached默认是关闭LRU爬虫的。LRU爬虫是一个单独的线程,会去清理失效的ITEM。

5. LRU淘汰。当缓存没有内存可以分配给新的元素的时候,memcached会从LRU链表的尾部开始淘汰一个ITEM,不管这个ITEM是否还在有效期都将会面临淘汰。LRU链表插入缓存ITEM的时候有先后顺序,所以淘汰一个ITEM也是从尾部进行 也就是先淘汰最早的ITEM。

****************   http://blog.csdn.net/initphp/article/details/44680115

 

 

 

https://www.cnblogs.com/space007/p/6114558.html

转载于:https://my.oschina.net/u/3705388/blog/1618353

你可能感兴趣的文章
大黄扫毒汤的学习
查看>>
锋利的jQuery第2版学习笔记8~11章
查看>>
黑客和骇客
查看>>
linux字符设备驱动学习笔记(一):简单的字符设备驱动
查看>>
Beta_版本发布
查看>>
ajax
查看>>
linux下nginx tomcat 设置网站根目录
查看>>
回调的经典理解
查看>>
1066 Root of AVL Tree
查看>>
时间戳转换
查看>>
问题集录--Java高级软件工程师面试考纲(转)
查看>>
TCL笔试题 将A,B,B,C,D,E,第三个字符不可以是E的所有组合输出;
查看>>
Mysql 数据库系列
查看>>
[C++基础]037_编写不可被继承的类
查看>>
C#_数据库基本交互
查看>>
CSS_样式sample
查看>>
Jordan标准形
查看>>
typeconfig.json配置说明
查看>>
bzoj3551 Peaks加强版
查看>>
phonegap工程中修改app的名字
查看>>