Redis的内存淘汰策略

Redis的内存淘汰策略

Redis4.0后默认使用的Noevction不进行数据淘汰策略,而Redis3.0之前使用Volatile-lru

图片[1]- 卡尼奶资源网Redis的内存淘汰策略- 卡尼奶资源网卡尼奶资源网-萧囡资源网-QQ活动_资源分享-源码基地-项目分享-安卓绿色软件基地

1、volatile-lru

在过期时间的数据中,最久没有使用的键被淘汰。是一个链表的形式,头为MRU端,尾为LRU端

图片[2]- 卡尼奶资源网Redis的内存淘汰策略- 卡尼奶资源网卡尼奶资源网-萧囡资源网-QQ活动_资源分享-源码基地-项目分享-安卓绿色软件基地

volatile-lru设计思想:

如果当前访问数据20,那么就会把20提到MRU端,所有的数据往后移。当如果某一天链表数据放满了,在需要存一个数据15时,存不下,此时如果选择volatile-lru策略,就会把最不常访问的数据进行淘汰掉。此时,又出现了一个问题,当这个链表中数据太长了,如果要访问链表的最后一个数据时,把最后一个数据提前到MRU端,链表中的所有数据全部往后移,此时增加了Redis的性能消耗。由此lru进行了一个小优化,当每次访问时,记录一个系统当前毫秒值LRU,再定义一个候选集合(链表),数量自己定义。随机找一些数据加入候选集合中,并根据当时访问的系统毫秒值进行从大到小排序,大的放入链表头,小的放入链表尾部。最后进行互相比较,把最小的进行淘汰掉,也就是最久没访问的。

2、volatile-random

在过期时间的数据中进行随机淘汰,在没有到达过期时间的进行随机淘汰,在到达过期时间的就一定被淘汰。

3、volatile-ttl

在过期时间的数据中进行淘汰,在到达过期时间就会被淘汰。

4、volatile-lfu

在过期时间的数据中进行淘汰,使用频率最少的键被淘汰

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容