讲师中心 微信公众号
AI工具推荐 视频效率加速

Redis如何结合业务特点定制淘汰策略?

夏强酱_6522

夏强酱_6522

发布时间:2026-08-27 11:38:26

|

504人浏览过

|

来源于php中文网

原创

maxmemory 必须先设置,否则所有淘汰策略无效;noeviction 在缓存场景下危险,因只拒写不驱逐,易致上游异常雪崩;volatile-lru 依赖过期键比例,allkeys-lru 更通用;volatile-ttl 适用于短周期任务状态缓存;LFU 有CPU开销,需压测验证。

redis如何结合业务特点定制淘汰策略?

maxmemory 必须先设,否则所有淘汰策略都无效——这是最常被忽略的前提。

为什么 noeviction 在缓存场景下反而危险?

它不删数据,只拒写。但缓存系统本就依赖“写入驱逐旧值”,一旦触发,SET、HSET 等命令直接返回 OOM command not allowed when used memory > 'maxmemory' 错误,上游服务可能抛异常或降级失败。

适用场景其实很窄:仅限纯只读+可重建的元数据缓存,或金融类强一致性写库(此时 Redis 仅作旁路日志暂存)。普通业务缓存用它,等于把内存压力转嫁给应用层重试逻辑,极易雪崩。

  • 检查是否已启用:CONFIG GET maxmemory 返回 "0" 就代表没开上限,淘汰策略形同虚设
  • noeviction 下 evicted_keys 指标恒为 0,但 rejected_connections 或客户端报错数会飙升
  • 若必须保数据,优先考虑分库:热数据用 allkeys-lru,冷数据单独实例配 noeviction

volatile-lru 和 allkeys-lru 到底该选哪个?

关键看你的过期键占比和数据分层逻辑。如果大量 key 都没设 EXPIRE(比如用户 session 用 SETEX,但配置中心数据用 SET 永不过期),volatile-lru 可能根本找不到可淘汰对象,最终退化成 noeviction。

而 allkeys-lru 虽然更“激进”,但它对无过期时间的 key 同样有效——只要访问频次低,就会被抽样淘汰。这对通用缓存更友好。

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

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

下载
  • 查当前过期键比例:INFO keyspace 中看各 db 的 expires 字段,若 keys 远大于 expires,volatile-* 类策略基本失效
  • maxmemory-samples 默认是 5,调高到 10~15 可提升 LRU 近似精度,但单次淘汰耗时增加,需压测验证延迟毛刺
  • 注意:LRU 是近似算法,靠 robj.lru 字段的 24 位时间戳截断值判断,不是精确访问顺序

volatile-ttl 适合什么真实业务?

它不看访问频次,只比谁快过期。典型用于短周期任务状态缓存:比如秒杀库存预扣减的临时锁(SET lock:order:123 "1" EX 10),或 API 限流窗口计数器(INCRBY counter:ip:192.168.1.1 1 + EXPIRE)。这类数据天然具备“越早设过期,越该先删”的语义。

但一旦混入长 TTL 或永不过期 key,volatile-ttl 就完全失效——它只在带 EXPIRE 标记的 key 中找最小 TTL。

  • 监控 evicted_keys 增速的同时,务必对比 expired_keys:若后者远高于前者,说明淘汰主要靠被动过期,volatile-ttl 实际未起效
  • 不要把它当“智能清理”,它只是 TTL 排序器。想保热点,得靠 LFU;想保时间敏感性,才用它
  • Redis 7.0+ 支持 maxmemory-eviction-step 控制单次淘汰数量,避免大 key 集中释放导致延迟抖动

LFU 策略的隐含成本你测过吗?

volatile-lfu 和 allkeys-lfu 要维护每个 key 的访问频次计数器,每次 GET 都要更新。高频读场景下,CPU 使用率可能比 LRU 高 15%~20%,尤其在小 key 大量并发读时。

它的优势在于识别“稳定中频访问”数据(比如每日固定时段查询的报表缓存),但对突发流量不敏感——计数器衰减周期默认是 100 万次访问或 1 分钟(由 lfu-decay-time 控制),新热 key 需要时间积累热度。

  • 启用前先开 INFO stats 看 instantaneous_ops_per_sec 峰值,若 > 5w QPS,建议压测 LFU 开销
  • lfu-log-factor 越大,频次区分度越高(10 以上才能明显区分 100 次 vs 1000 次访问),但计数器溢出风险上升
  • LFU 不是银弹:如果业务里 80% 的读集中在 20% 的 key 上,allkeys-lru 实际命中率可能更高,因为 LRU 对“最近一次访问”更敏感
真正难的不是选策略,而是让策略和业务生命周期对齐——比如用户 token 缓存用 volatile-ttl,商品详情用 allkeys-lru,配置中心用 noeviction 单独实例。混在一个实例里硬套一种策略,迟早踩坑。

热门AI工具

更多
讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

相关专题

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

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

4149

2023.11.02

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

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

3635

2023.11.14

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

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

6432

2024.04.02

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

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

603

2024.04.07

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

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

716

2024.04.07

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

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

5922

2024.04.07

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

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

1140

2024.04.07

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

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

956

2024.04.07

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

80

2026.09.23

热门下载

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

精品课程

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

共0课时 | 0人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn