Redis为什么需要多种内存淘汰策略?各场景解析

千萱同学_8015

千萱同学_8015

2026-07-14

681人浏览

原创

volatile-lru仅淘汰设置了过期时间的键中最近最少使用的,allkeys-lru则对所有键一视同仁按lru淘汰;核心区别在于作用范围与数据安全性。

redis为什么需要多种内存淘汰策略?各场景解析

Redis需要多种内存淘汰策略,不是为了“功能丰富”,而是因为不同业务对数据生命周期、访问模式和容错能力的要求根本不同。选错策略轻则缓存命中率暴跌,重则把关键数据误删。

volatile-lru 和 allkeys-lru 的区别在哪?

区别核心在于「作用范围」和「数据安全性」。

  • volatile-lru 只在设置了 EXPIRE 或 PEXPIRE 的键中做 LRU 淘汰,没设过期时间的键永远不会被它动——适合混存「缓存+持久配置」的场景,比如 session 缓存(有 TTL)和系统参数(永久有效)共存
  • allkeys-lru 对所有键一视同仁,不管有没有 EXPIRE,只要内存满就可能被淘汰——适合纯缓存场景,比如 CDN 后端或 API 响应缓存,所有数据都可重建
  • 误用风险:把 allkeys-lru 用在含重要配置项的实例上,CONFIG SET 写入的键可能被随机踢掉;反过来,volatile-lru 在全量数据都没设 TTL 时会退化为 noeviction,写请求直接报 OOM command not allowed when used memory > 'maxmemory'

LFU 策略真的比 LRU 更“聪明”吗?

LFU 不是万能升级版,它只在「访问频次差异极大」的场景下才有优势,且代价明确。

Redis Skill - 高性能缓存管理
Redis Skill - 高性能缓存管理

Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。

下载
  • allkeys-lfu 依赖每个键的访问计数器,Redis 用 16 位字段存储频率值,并通过衰减机制(lfu-decay-time 配置)降低旧访问的影响——这意味着它更倾向保留长期高频访问的键,而非刚火起来的热点
  • 典型适用场景:商品详情页缓存(头部 SKU 被反复刷)、用户画像特征(稳定读取)、API token 白名单(长期有效且高频校验)
  • 不适用场景:突发流量型热点(如秒杀商品),LFU 计数来不及上升就被淘汰;或者写多读少的场景(计数器徒增开销,无实际收益)
  • 性能提示:maxmemory-samples 默认为 5,但 LFU 对采样敏感度高于 LRU,调高到 10~20 可提升准确性,但也增加 CPU 开销

volatile-ttl 为什么常被低估?

它不是“低端策略”,而是专为「天然有时效性」的数据设计的零成本淘汰方案。

  • volatile-ttl 不统计访问时间或频次,只看剩余 TTL,优先淘汰 TTL 最小的键——逻辑极简,CPU 开销几乎为零
  • 最适合场景:验证码(SET key code EX 300)、临时令牌(JWT refresh token)、短期会话(SETEX session:123 600 data),这些数据本就该“自然死亡”,无需算法干预
  • 陷阱:如果大量键设置了相同或相近的 TTL(比如统一设 3600 秒),volatile-ttl 会退化为随机淘汰,此时不如换 volatile-lru 或 volatile-lfu
  • 注意:TTL 是动态值,EXPIREAT 设置的绝对时间点也会影响排序,不是设置完就固定不变

noeviction 真的只是“保命策略”吗?

它是最保守的选择,但保守不等于懒政——它强制你直面容量规划问题。

  • noeviction 下,内存满后所有写命令(SET、HSET、LPUSH 等)返回错误,但读和删仍可进行——这迫使客户端必须处理 OOM 错误,比如降级、熔断或触发扩容流程
  • 金融类系统、审计日志、配置中心等场景会主动启用它,因为宁可拒绝写入,也不能让 Redis 自行决定删哪条记录
  • 容易忽略的细节:主从复制时,noeviction 在从节点也生效,但主节点写失败不会同步给从节点,可能导致主从状态不一致;需配合监控告警(mem_usage、evicted_keys 指标)提前干预

真正难的不是记住八种策略的名字,而是理解你的数据有没有 TTL、访问是否集中、丢失某条键的后果有多重——这些判断没法靠文档抄答案,得看业务日志里的 KEYS * 分布、INFO memory 中的 used_memory_peak 波动,以及 SLOWLOG 里淘汰动作是否卡住了主线程。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.02

4109

19

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.14

3575

11

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.02

6352

6

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

603

6

redis怎么解决数据一致性
redis怎么解决数据一致性

redis 提供了两种一致性模型,以维护副本数据一致性:强一致性 (sync) 确保写操作仅在复制到所有从节点后才完成;最终一致性 (async) 则在主节点上写操作后认为已完成,牺牲一致性换取性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

716

6

mysql和redis怎么保证双写一致性
mysql和redis怎么保证双写一致性

确保 mysql 和 redis 双写一致性的技术包括:1、事务性更新:同时更新 mysql 和 redis,保证一致性;2、主从复制:mysql 主服务器更改同步到 redis 从服务器;3、基于事件的更新:mysql 记录更改并发送到 redis等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

5802

6

redis缓存一般存些什么数据
redis缓存一般存些什么数据

redis缓存中存储的数据类型包括:字符串、哈希、列表、集合、有序集合、位图、地理空间数据和hyperloglog。这些数据类型适用于存储各种数据,从简单信息到复杂对象和地理位置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

1140

6

redis的8种数据类型有哪些
redis的8种数据类型有哪些

redis 提供 8 种数据类型:字符串(文本、数字、二进制)、哈希(键值对)、列表(有序集合)、集合(无序唯一元素)、有序集合(按分数排序)、地理空间(地理位置)、hyperloglog(估计大数据基数)和位图(位序列存储)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

936

6

redis主要作用有哪些
redis主要作用有哪些

redis 的主要作用包括:1. 缓存数据,提高访问速度;2. 充当消息队列,实现消息传递;3. 存储各种数据类型,如字符串、散列和集合;4. 管理会话信息,确保可靠性和可用性;5. 限制请求速率,防止服务器超载等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

5238

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习