Redis缓存替换策略那些事儿,聊聊怎么提升程序性能和效率
- 问答
- 2026-01-08 03:58:53
- 7
开始)
今天咱们来聊一个挺实在的话题,就是Redis的缓存替换策略,这东西听起来好像挺技术、挺复杂的,但其实说白了,就是当你的Redis这个小仓库(缓存)被数据塞满了,再也放不下新东西的时候,你该怎么办?是随便扔掉一些旧货,还是精挑细选地把一些不太重要的东西清出去?这个“扔东西”的规则,就是缓存替换策略,选对了策略,你的程序就能跑得飞快,效率倍增;选错了,可能加了缓存反而更慢了。
咱们得明白为啥会有“塞满”这回事,Redis主要是用内存来存数据的,内存这东西可比硬盘金贵多了,空间是有限的,你不可能无限制地往里面塞东西,所以必须有个管理机制,这就跟你家的衣柜一样,空间就那么大,新衣服不断买进来,总得把一些旧衣服处理掉才能腾地方。
Redis提供了哪些“处理旧衣服”的策略呢?咱们挑几个最常用、最核心的来说道说道。
最近最少使用(LRU - Least Recently Used)
这个策略的名字几乎就是它的全部解释了:淘汰那些最长时间没被用过的数据,想象一下,你衣柜里那些一整年都没碰过的衣服,是不是最先被考虑扔掉?Redis的LRU策略也是这个道理,它会认为,如果一个数据很久都没被访问,那它将来被访问的可能性也很小,所以优先淘汰它。

这个策略非常符合常识,在大多数情况下效果都很好,因为它保护了“热点数据”,也就是经常被访问的数据,在一个新闻网站上,最新的热门新闻会被频繁点击,而一个月前的旧新闻就很少有人看了,用LRU策略,就能大概率保证热门新闻留在缓存里,用户点开时速度飞快。
最不经常使用(LFU - Least Frequently Used)
这个策略和LRU有点像,但关注点不同,LFU不看数据“多久没被用”,而是看它“被用的次数多不多”,它会淘汰那些被访问次数最少的数据,这就像是你衣柜里,你可能会扔掉那件只穿过一次、再也不喜欢的外套,而保留那件经常穿的牛仔裤。
LFU适合那种访问模式比较稳定、热点数据长期不变的场景,一些经典的商品、基础资料信息,它们会被反复查询,但热度持久,LFU能确保这些“常青树”数据不会被偶尔爆火一下的新数据给挤出去。
随机淘汰(Random)

顾名思义,就是随便挑一个数据淘汰掉,这个策略非常简单,Redis不需要花时间去计算哪个数据是LRU或者LFU,所以开销很小,但它的缺点也很明显:太随意了!万一它随手就把一个非常热门的数据给扔了呢?那下次访问这个数据时,就得去慢吞吞的数据库里找,造成一次明显的卡顿。
随机策略通常不是在内存紧张时的最优选,除非你的应用场景非常特殊,数据的访问完全没规律可言。
设置过期时间(TTL - Time To Live)
这不算一种主动的替换策略,但它是一种非常重要的缓存管理思想,你可以给存入Redis的每一个数据都设一个“保质期”,比如5分钟、1小时,时间一到,Redis会自动把这个数据删除掉,这就像给食品贴上过期标签,到时候自动清理。
这种方式特别适合那些“有时效性”的数据,手机验证码10分钟后失效,或者股市行情数据每30秒更新一次,通过设置合理的TTL,你可以确保缓存里的数据不会太旧,同时也能自动腾出空间,很多时候,我们会把TTL和其他策略(如LRU)结合使用,先淘汰过期的,如果空间还是不够,再用LRU等策略去淘汰未过期的。

不淘汰(noeviction)
这是最“刚”的一个策略,当内存满了之后,如果客户端还想写入新数据,Redis直接报错,拒绝服务,这个策略能保证现有的缓存数据绝对不会被丢失,但代价是可能会造成写请求失败,影响程序的正常运行,除非你的数据极其重要,丢一条都不行,否则一般不会用这种策略。
那我们该怎么选呢?怎么才能提升性能和效率?
选择策略没有绝对的金标准,关键要看你的业务特点:
- 如果你的数据访问有明显的“效应,比如社交媒体的新鲜事、最新商品列表,LRU 通常是安全且高效的选择,这也是Redis默认的策略之一。
- 如果你的业务里有很多“长青”内容,比如经典文章、基础城市信息,访问频率很稳定,LFU 可能会带来更好的缓存命中率。
- 一定要给你的缓存数据设置合理的过期时间(TTL),这是防止缓存空间被无用的“僵尸”数据占满的最有效手段之一,哪怕设得长一点,也比不设好。
- 监控你的缓存命中率,这是衡量缓存是否有效的核心指标,命中率高,说明你的策略选对了,大部分请求都直接从高速的Redis得到了响应,数据库压力小,程序性能自然就好,如果命中率很低,那你就得反思一下:是不是内存给太小了?还是策略选得不对?或者缓存的数据本身就不合适?
理解这些缓存替换策略,就像是学会了如何高效地打理你的储物间,你不是一味地买买买(写入缓存),而是有策略地“断舍离”(淘汰数据),确保最有用的东西永远在手边,这样一来,程序的性能和处理效率,想不提升都难。 结束)
来源参考:主要思想基于对Redis官方文档中关于maxmemory-policy配置项的常见策略(如noeviction, allkeys-lru, volatile-lru, allkeys-lfu, volatile-lfu, allkeys-random, volatile-random, volatile-ttl)的通俗化解读和场景化比喻。
本文由黎家于2026-01-08发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://www.haoid.cn/wenda/76590.html
