- 谈谈你对Redis中内存淘汰策略的了解
- 如何保证 Redis 中数据都是热点数据
4.0 版本后增加了以下两种:
LRU(Least Recently Used)表示最近最少使用,该算法根据数据的历史访问记录来进行淘汰数据,其核心思想是 “如果数据最近被访问过,那么将来被访问的几率也更高”
LRU算法的常见实现方式为链表,新数据放在链表头部 ,链表中的数据被访问就移动到链头,链表满的时候从链表尾部移出数据

而在 Redis 中使用的是近似 LRU 算法,为什么说是近似呢?Redis中是随机采样5个(可以修改参数 maxmemory-samples 配置)key,然后从中选择访问时间最早的 key 进行淘汰,因此当采样 key 的数量与 Redis 库中 key 的数量越接近,淘汰的规则就越接近 LRU 算法。但官方推荐 5 个就足够了,最多不超过 10 个,越大就越消耗 CPU 的资源
但在 LRU 算法下,如果一个热点数据最近很少访问,而非热点数据近期访问了,就会误把热点数据淘汰而留下了非热点数据,因此在Redis4.x中新增了 LFU 算法
LFU(Least Frequently Used)表示最不经常使用,它是根据数据的历史访问频率来淘汰数据,其核心思想是 “如果数据过去被访问多次,那么将来被访问的频率也更高”
LFU算法的常见实现方式为链表:新数据放在链表尾部 ,链表中的数据按照被访问次数降序排列,访问次数相同的按最近访问时间降序排列,链表满的时候从链表尾部移出数据

LFU 算法在 Redis 中是通过一个计数器来实现的,每个 key 都有一个计数器,访问频度越高,计数器的值就越大,Redis 就根据计数器的值来淘汰 key,当然计数器的值也是会随着时间减少的
用户可配置的 LFU 算法参数一共有两个分别是:lfu-log-factor 和 lfu-decay-time
获取当前内存淘汰策略
127.0.0.1:6379> config get maxmemory-policy

通过配置文件设置淘汰策略(修改 redis.conf 文件):
maxmemory-policy allkeys-lru
通过命令修改内存淘汰策略
127.0.0.1:6379> config set maxmemory-policy allkeys-lru
转载请标明出处,原文地址:https://blog.csdn.net/weixin_41835916 如果觉得本文对您有帮助,请点击顶支持一下,您的支持是我写作最大的动力,谢谢。