- 一、题目
- 二、内存淘汰策略
- 2.1、策略
- 2.2、LRU算法
- 2.3、LFU 算法
- 三、获取及设置内存淘汰策略
- 3.1、获取内存淘汰策略
- 3.2、设置淘汰策略
二、内存淘汰策略 2.1、策略
- 谈谈你对Redis中内存淘汰策略的了解
- 如何保证 Redis 中数据都是热点数据
- Volatile-LRU:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰;
- Volatile-TTL:从已设置过期时间的数据集中挑选将要过期的数据淘汰;
- Volatile-Random:从已设置过期时间的数据集中任意选择数据淘汰;
- Allkeys-LRU:当不足以容纳新写入数据时,移除最近最少使用的 key(最常用);
- Allkeys-Random:从数据集中任意选择数据淘汰;
- No-Eviction(默认策略):当内存不足以容纳新写入数据时,新写入操作会报错;
4.0 版本后增加了以下两种:
- Volatile-LFU:从已设置过期时间的数据集中挑选最不经常使用的数据淘汰;
- Allkeys-LFU:当内存不足以容纳新写入数据时,移除最不经常使用的 key;
LRU(Least Recently Used)表示最近最少使用,该算法根据数据的历史访问记录来进行淘汰数据,其核心思想是 “如果数据最近被访问过,那么将来被访问的几率也更高”
LRU算法的常见实现方式为链表,新数据放在链表头部 ,链表中的数据被访问就移动到链头,链表满的时候从链表尾部移出数据
而在 Redis 中使用的是近似 LRU 算法,为什么说是近似呢?Redis中是随机采样5个(可以修改参数 maxmemory-samples 配置)key,然后从中选择访问时间最早的 key 进行淘汰,因此当采样 key 的数量与 Redis 库中 key 的数量越接近,淘汰的规则就越接近 LRU 算法。但官方推荐 5 个就足够了,最多不超过 10 个,越大就越消耗 CPU 的资源
2.3、LFU 算法但在 LRU 算法下,如果一个热点数据最近很少访问,而非热点数据近期访问了,就会误把热点数据淘汰而留下了非热点数据,因此在Redis4.x中新增了 LFU 算法
LFU(Least Frequently Used)表示最不经常使用,它是根据数据的历史访问频率来淘汰数据,其核心思想是 “如果数据过去被访问多次,那么将来被访问的频率也更高”
LFU算法的常见实现方式为链表:新数据放在链表尾部 ,链表中的数据按照被访问次数降序排列,访问次数相同的按最近访问时间降序排列,链表满的时候从链表尾部移出数据
LFU 算法在 Redis 中是通过一个计数器来实现的,每个 key 都有一个计数器,访问频度越高,计数器的值就越大,Redis 就根据计数器的值来淘汰 key,当然计数器的值也是会随着时间减少的
用户可配置的 LFU 算法参数一共有两个分别是:lfu-log-factor 和 lfu-decay-time
- lfu-log-factor 参数值设置的越大,key 的计数值就越难增长,因此就要求 key 的访问频度较高才能避免被淘汰
- lfu-decay-time 参数值是表示隔多久将计数器的值减一
获取当前内存淘汰策略
127.0.0.1:6379> config get maxmemory-policy3.2、设置淘汰策略
通过配置文件设置淘汰策略(修改 redis.conf 文件):
maxmemory-policy allkeys-lru
通过命令修改内存淘汰策略
127.0.0.1:6379> config set maxmemory-policy allkeys-lru
暑期编程PK赛 得CSDN机械键盘等精美礼品!转载请标明出处,原文地址:https://blog.csdn.net/weixin_41835916 如果觉得本文对您有帮助,请点击顶支持一下,您的支持是我写作最大的动力,谢谢。



