1、redis内存淘汰策略
- volatile-lru 从已设置过期时间的数据集中挑选最近最少使⽤的数据淘汰
- volatile-random 从已设置过期时间的数据集中任意选择数据淘汰
- allkeys-lru 当内存不⾜以容纳新写⼊数据时,在键空间中,移除最近最少使⽤的 key,常用
- allkeys-random 从数据集中任意选择数据淘汰
- volatile-ttl 从已设置过期时间的数据集中挑选将要过期的数据淘汰
- no-eviction 禁止驱逐数据,也就是说当内存不⾜以容纳新写⼊数据时,新写⼊操作会报错 OOM。
4.0 版本后增加两种:
1、volatile-lfu:从已设置过期时间的数据集中挑选最不经常使用的数据淘汰算法
2、allkeys-lfu:当内存不足以容纳新写入数据时,在键空间中,移除最不经常使用的key
- volatile-lfu 从已设置过期时间的数据集中挑选最不经常使⽤的数据淘汰
- allkeys-lfu 当内存不⾜以容纳新写⼊数据时,在键空间中,移除最不经常使⽤的 key。
常见选择: allkeys-lru 用于应用对缓存的访问符合幂律分布,也就是存在相对热点数据,或者不太清楚应用的缓存访问分 布状况,可以选择 allkeys-lru 策略。 allkeys-random 应用对于缓存 key 的访问概率相等,则可以使用这个策略。 volatile-ttl 策略使得可以向 Redis 提示哪些 key 更适合被移除。
2、Redis删除策略
- 删除策略的目的:redis 开辟了一个空间用来存放值的地址和其过期时间,删除策略是为了在内存和 cpu 之间找到一个平衡,过 期数据通常是在 cpu 闲暇之余被删除的。
- Redis 中的过期数据删除情况:redis 服务器当中有很多的操作需要被执行,执行会导致 CPU 的工作大大的增 加,当内存的空间还足够时,已被删除的数据的内存空间并未直接释放,而是对客户端的指令先执行
- redis 中的数据删除策略包括定时删除、惰性删除、定期删除。
内存占用 | CPU 占用 | 特征 | |
定时删除 | 节约内存,无占用 | 不分时段占用 CPU 资源,频度高 | 时间换空间,适用于小内存,强 CPU |
惰性删除 | 内存占用严重 | 延时执行,CPU 利用率高 | 空间换时间,适用于大内存,弱 CPU |
定期删除 | 内存定期随机清理 | 每秒花费固定的 CPU 资源,维护内存 | 随机抽查,重点抽查 |