Redis怎么处理那些被淘汰却还需要后续计算的数据_在淘汰前通过发布订阅机制将Key推送到MQ进行兜底

P粉602998670

P粉602998670

2026-04-26

800人浏览

原创

redis淘汰机制不触发发布订阅,因淘汰是纯内存后台行为且无钩子;唯一可拦截的窗口是过期键清理路径;需通过ttl+scan主动扫描即将过期key并续期、归档或推送至mq。

redis怎么处理那些被淘汰却还需要后续计算的数据_在淘汰前通过发布订阅机制将key推送到mq进行兜底

Redis 淘汰前无法自动触发发布订阅

Redis 的内存淘汰(如 volatile-lruallkeys-lfu)是纯内存层面的后台行为,不带任何钩子或回调。它不会在 key 被驱逐前主动执行 PUBLISH、调用 Lua 脚本,更不会帮你推到 MQ。所谓“淘汰前兜底”,本质是误读了淘汰机制的触发时机和可控性。

真正能拦截淘汰动作的只有过期键清理路径

Redis 对“过期”和“淘汰”做了严格区分:

  • 过期键(有 EXPIRE / PEXPIREAT)走的是惰性 + 定期删除,这部分逻辑可被间接观测;
  • 淘汰(maxmemory 触发)是 LRU/LFU/Random 等策略直接从候选集里选 key 并释放内存,全程无事件、无日志、不可中断。

所以,想“在淘汰前推送”,唯一可行的窗口是:你主动控制哪些 key 该被淘汰,并在它被淘汰前手动做兜底。这需要你放弃依赖 Redis 自动淘汰,转为自行管理生命周期。

Redis 8.2.3
Redis 8.2.3

Redis 8.2.3 是一款安全优先的高性能键值存储系统。该版本紧急修复了可能引发远程代码执行(RCE)的高危漏洞(CVE-2025-62507),并解决了 HyperLogLog 及 Cuckoo Filter 等数据结构在特定场景下的崩溃问题。建议所有用户立即升级,以保障生产环境的系统稳定与数据安全。

下载

替代方案:用 TTL + 定时扫描 + 主动续期/归档

  • TTL 命令能查出 key 剩余秒数,但返回 -2 表示已过期(尚未被惰性或定期删除),-1 表示永不过期;
  • 你可以用 SCAN 配合 TTL 批量扫描即将过期(比如
  • 调用 EXPIRE 续期(适用于用户活跃场景,如 token)
  • 读取 value 后发到 Kafka/RabbitMQ(注意避免重复推送,需幂等设计)
  • 写入归档表或落盘,标记为“已兜底”,后续淘汰就无所谓了
  • 不要用 KEYS *,它会阻塞主线程;SCAN 是唯一安全的选择。
  • 别踩的坑:监听 __keyevent@*__:expired 不能覆盖淘汰场景

    这个频道只广播由过期机制触发的删除事件(即惰性或定期删除真正删掉 key 时),而 noevictionallkeys-lru 淘汰的 key 根本不会触发该事件——它们压根没设过期时间。很多团队误以为订阅这个就能兜住所有“消失的 key”,结果线上出问题才发现漏了大半。

    真正要兜住“计算型数据”,得从应用层设计:把需要后续计算的 key 显式打标(比如加 :calc 后缀)、统一用 EXPIREAT 设置逻辑过期时间、再配一个独立的归档服务轮询这些 key。Redis 本身,只负责快和稳,不负责“临终托付”。

    相关文章

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

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

    下载

    相关标签:

    redis

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

    相关专题

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

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

    2023.11.02

    1884

    19

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

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

    2023.11.14

    1558

    11

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

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

    2024.04.02

    2427

    6

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

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

    2024.04.07

    518

    6

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

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

    2024.04.07

    524

    6

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

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

    2024.04.07

    2426

    6

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

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

    2024.04.07

    937

    6

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

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

    2024.04.07

    687

    6

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

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

    2024.04.07

    2329

    6

    热门下载

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

    精品课程

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

    共0课时 | 0人学习

    进程与SOCKET
    进程与SOCKET

    共6课时 | 0.5万人学习

    Redis+MySQL数据库面试教程
    Redis+MySQL数据库面试教程

    共72课时 | 9万人学习