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

怎样在Redis中设置空值标记并配合消息队列实现异步穿透修复?

雨涛同学_3345

雨涛同学_3345

发布时间:2026-10-21 07:18:19

|

392人浏览过

|

来源于php中文网

原创

空值标记不能存 null,因Spring Data Redis序列化器对null处理不一致,易导致反序列化异常或误判;MQ消息须带上下文与版本,避免重复写入空值,且需网关拦截非法参数、消费者幂等、定期清理过期空key。

怎样在redis中设置空值标记并配合消息队列实现异步穿透修复?

空值标记不能存 null,消息队列也不能直接“刷新空 key”——这两步不配对,缓存穿透就还在漏。

为什么 redisTemplate.opsForValue().set("user:999999", null, 120, TimeUnit.SECONDS) 是错的

Spring Data Redis 的默认序列化器对 null 处理不一致:有的版本存进去是 Redis 的 nil,取出来却变成字符串 "null";有的反序列化直接抛 SerializationException。业务代码里写 if (cached == null) 会误判,甚至把 "null" 当成有效数据返回给前端。

  • 统一用明确标记值,比如 "__NULL__"(字符串)或 new byte[0](空字节数组)
  • 读取后必须显式判断:if ("__NULL__".equals(cached)) { return null; }
  • 如果用 Jackson 序列化器,建议存结构化空响应,如 {"code":404,"msg":"not_found"},避免反序列化失败

消息队列不能只发 “刷新 user:999999”,得带上下文和版本

空值缓存本身只是兜底,它不解决“谁该重建”“重建什么”“重建是否过时”的问题。如果 MQ 消息只含 key 名,消费者查 DB 发现数据仍不存在,就会反复写入同样的 "__NULL__",浪费资源还掩盖真实问题。

redis-tools
redis-tools

按类别查找Redis命令、检测服务器连接、监控键数量和内存占用,支持离线速查表。

下载
  • 消息体必须包含原始请求参数(如 userId=999999)、触发时间戳、以及可选的业务上下文(如来源渠道、风控等级)
  • 写入缓存前加 SETNX product_999999:version <ts> 或用 Lua 脚本保证“仅首个成功消费者执行重建”
  • 若 DB 确认无此记录,应跳过写缓存,或写入带 TTL 的空标记(此时 TTL 仍按 60s~180s 设,不能沿用原消息里的过期逻辑)

空值缓存 + MQ 的组合必须绕开三个典型陷阱

这套方案看似完整,但落地时最容易在边界处失效:不是技术没跑通,而是条件没对齐。

  • 接口层未做参数校验:攻击者传 id=abc 或 id=-1,请求根本不需要进缓存层,更不该发 MQ —— 这类请求应在网关或 Controller 层直接拦截并返回 400
  • MQ 消费者没做幂等:同一条“修复 user:999999”的消息被重投两次,会导致两次查 DB、两次写 "__NULL__",Redis 内存虚高且无意义
  • 空 key 清理滞后:大量过期空值 key 不会立刻从内存释放(Redis 惰性删除),需配合定期扫描 SCAN + TTL 非正数的 key 做主动清理,否则 INFO memory 中 used_memory 持续偏高

空值标记和 MQ 的协同,本质是“先稳住流量,再择机修复”,而不是让 MQ 替代校验或代替缓存设计。真正难的从来不是怎么发消息,而是怎么定义“值得修复的空值”——这需要和业务 SLA、数据写入节奏、风控策略一起对齐,而不是孤立配置一个 TTL 或塞一条消息。

热门AI工具

更多
讯飞绘文

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

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

豆包大模型

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

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

DeepSeek

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

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

WorkBuddy

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

相关专题

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

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

4549

2023.11.02

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

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

4095

2023.11.14

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

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

7612

2024.04.02

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

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

643

2024.04.07

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

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

756

2024.04.07

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

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

7542

2024.04.07

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

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

1160

2024.04.07

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

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

1136

2024.04.07

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

100

2026.10.16

热门下载

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

精品课程

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

共0课时 | 0人学习

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

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