Redis的内存淘汰策略
Redis4.0后默认使用的Noevction不进行数据淘汰策略,而Redis3.0之前使用Volatile-lru
![图片[1]- 卡尼奶资源网Redis的内存淘汰策略- 卡尼奶资源网卡尼奶资源网-萧囡资源网-QQ活动_资源分享-源码基地-项目分享-安卓绿色软件基地](https://www.knnzy.cn/wp-content/uploads/2026/01/image-53.png)
1、volatile-lru
在过期时间的数据中,最久没有使用的键被淘汰。是一个链表的形式,头为MRU端,尾为LRU端
![图片[2]- 卡尼奶资源网Redis的内存淘汰策略- 卡尼奶资源网卡尼奶资源网-萧囡资源网-QQ活动_资源分享-源码基地-项目分享-安卓绿色软件基地](https://www.knnzy.cn/wp-content/uploads/2026/01/image-52.png)
volatile-lru设计思想:
如果当前访问数据20,那么就会把20提到MRU端,所有的数据往后移。当如果某一天链表数据放满了,在需要存一个数据15时,存不下,此时如果选择volatile-lru策略,就会把最不常访问的数据进行淘汰掉。此时,又出现了一个问题,当这个链表中数据太长了,如果要访问链表的最后一个数据时,把最后一个数据提前到MRU端,链表中的所有数据全部往后移,此时增加了Redis的性能消耗。由此lru进行了一个小优化,当每次访问时,记录一个系统当前毫秒值LRU,再定义一个候选集合(链表),数量自己定义。随机找一些数据加入候选集合中,并根据当时访问的系统毫秒值进行从大到小排序,大的放入链表头,小的放入链表尾部。最后进行互相比较,把最小的进行淘汰掉,也就是最久没访问的。
2、volatile-random
在过期时间的数据中进行随机淘汰,在没有到达过期时间的进行随机淘汰,在到达过期时间的就一定被淘汰。
3、volatile-ttl
在过期时间的数据中进行淘汰,在到达过期时间就会被淘汰。
4、volatile-lfu
在过期时间的数据中进行淘汰,使用频率最少的键被淘汰





















暂无评论内容