Redis的八种内存淘汰策略及其描述

Redis的八种内存淘汰策略及其描述

  • noeviction:当内存使用达到最大限制时,不淘汰任何数据,拒绝写入操作并返回错误,此时Redis只响应读操作(默认策略,≥v3.0)
  • allkeys-LRU:从所有键中使用LRU(最近最少使用)算法进行淘汰。适用于热点数据较多的场景,能够保留最近被访问过的数据。
  • allkeys-LFU:从所有key中使用LFU(最不经常使用)算法进行淘汰。LFU算法根据键的访问频率来淘汰数据,访问次数最少的键优先被淘汰(≥ v4.0)。
  • volatile-LRU:从设置了ttl key中使用LRU算法进行淘汰。这种策略只针对设置了过期时间的键,适用于部分数据有时效性要求的场景。
  • volatile-LFU:从设置了ttl key中使用LFU算法进行淘汰。同样只针对设置了过期时间的键,但淘汰依据是访问频率(≥ v4.0)。
  • allkeys-random:随机从所有key中淘汰数据。适用于对数据淘汰无特定要求的场景。
  • volatile-random:随机从设置了ttl key中淘汰数据。
  • volatile-ttl:根据键的剩余过期时间进行淘汰,越早过期的键越先被淘汰。适用于缓存数据时效性要求严格的场景。

🔔 Redis的LRU算法

和传统的LRU算法一样,若redis有key-A,key-B,key-C 3个键,key-A 10min前访问操作过,key-B 5min前访问操作过,key-C 2min前访问操作过,那么因为key-A的空闲时间最久一定是淘汰key-A

🔔 Redis的LFU算法

假设一个场景:1年前设置的key-A到目前访问操作量1200次,10天前设置的key-B,到目前访问操作量700次,按传统LFU算法应淘汰key-B,可key-A 7个月前访问操作就不再增加,而key-B每天均被访问操作,那么淘汰key-B显然是不适用的,于是redis引入了随时间延续递减访问量的机制,若redis设置为1天key没被访问操作便减5次,那么实际key-A值为1200-7×30×5=150,keyB值为700-0×5=700,key-A 150 < key-B700,淘汰key-A。这是redis真正使用的LFU算法。

🔔 Redis random算法

既不以访问次数做评判,也不以最长空闲时间做评判,在key中随机取样

Redis allkeys-LFU,allkeys-LRU,volatile-LRU,volatile-LFU 淘汰策略流程图

image

posted @   勤匠  阅读(123)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示