需要注意的是 , Redis中的LRU算法并没有严格按照常规的LRU算法的方式实现 , 而是基于LRU算法的思想做了自己的优化 。 在之前文章LRU算法详解?中我们知道 , 实现LRU算法时 , 需要将所有的数据按照访问时间距离当前时间的长短排序放到一个双向链表中 , 基于这个链表实现数据的淘汰 。 但Redis中存储的数据量是非常庞大的 , 如果要基于常规的LRU算法 , 就需要把所有的key全部放到这个双向链表中 , 这样就会导致这个链表非常非常大 , 不止需要提供更多的内存来存放这个链表结构 , 而且操作这么庞大的链表的性能也是比较差的 。
所以 , Redis中的LRU算法是这样实现的:首先定义一个淘汰池 , 这个淘汰池是一个数组(大小为16) , 然后触发淘汰时会根据配置的淘汰策略 , 先从符合条件的key中随机采样选出5(可在配置文件中配置)个key , 然后将这5个key按照空闲时间排序后放到淘汰池中 , 每次采样之后更新这个淘汰池 , 让这个淘汰池里保留的总是那些随机采样出的key中空闲时间最长的那部分key 。 需要删除key时 , 只需将淘汰池中空闲时间最长的key删掉即可 。
为了方便理解它的思想 , 我画了一个图:
Redis内存淘汰策略的配置学习了这8种内存淘汰策略之后 , Redis要什么时候会触发执行这些淘汰策略呢?又要怎么指定使用哪一种淘汰策略呢?这就要去Redis的配置文件中进行配置了
- 配置redis最大内存
当数据内存达到 maxmemory 时 , 便会触发redis的内存淘汰策略 。 该参数通常设定为其物理内存的四分之三 。
- 配置redis淘汰策略
- 配置最大采样数量
到这里相信我们已经熟练掌握了Redis的内存淘汰策略以及如何配置使用Redis的内存淘汰策略 , 后续文章会继续针对Redis这一中间件的知识做一系列的学习 。 如果想要了解更多Redis的知识 , 可以查看我的历史文章 。
点关注不迷路 , 跟我一起学技术!
- 小米科技|半夜浏览“不健康网站”,如果删除浏览记录,是不是就没事了?
- 算法|一文读懂加密算法的类型+每种算法都有优缺点
- 三星|一文看尽三星2022新品发布会:后科技时代的思考
- 删除|微信被人删除,为什么对方的微信还留在自己的列表里?原因很无奈
- 二手市场|神回复:男人手机里永远不会删除的APP是什么?
- 小米科技|微信删除的好友怎么找回?4个小妙招,对方不知道也能悄悄找回来
- MIUI|这才是MIUI智能化的冰山一角,一文解析MIUI13自动任务, 快Get起来!
- 删除|深夜浏览不良网站,以为删除记录就没事了?答案来了
- 显卡|读\董\行棋无悔才能读懂格力
- 删除|向俄罗斯提供芯片就断供工业设计类软件?网友:嚣张!
