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

Redis如何通过缓存空对象解决穿透_需要注意哪些内存风险

夏杰同学_2786

夏杰同学_2786

发布时间:2026-04-27 11:42:19

|

183人浏览过

|

来源于php中文网

原创

能,但仅对非法参数或恶意构造的不存在key有效;需主动写入可识别占位值并设2–5分钟过期,否则易致内存爆炸,建议结合布隆过滤器或逻辑过期方案。

redis如何通过缓存空对象解决穿透_需要注意哪些内存风险

缓存空对象到底能不能防穿透 能,但只在特定条件下有效。缓存空对象(即把 NULL 或空字符串、空 JSON 等显式写入 Redis)本质是用空间换时间,让后续相同 key 的请求直接命中缓存,不再打到后端 DB。但它对「参数非法、恶意构造不存在 key」这类穿透最有效;对「真实存在但刚被删掉」的场景,需配合逻辑过期或布隆过滤器。

注意:Redis 不会自动区分“查无此数据”和“查出 null”,你得在业务代码里主动判断并写入空值——否则缓存里压根没这条记录,照样穿透。

空对象该存什么值、设多久过期 空对象不是随便塞个 null 就完事。Java 客户端(如 Lettuce/Jedis)序列化时,null 可能被忽略或抛异常;Go 的 redis.Set 传 nil 会报错;Python 的 redis.set(key, None) 实际存的是字符串 "None",容易误判。

实操建议:

  • 统一用可识别的占位值,比如字符串 "__NULL__" 或 JSON {"code": 404, "data": null}
  • 过期时间必须设,且不宜过长——一般 2–5 分钟足够。过长会导致“刚删的数据查不到”,过短则起不到缓冲作用
  • 避免用永不过期(EXPIRE key -1),否则空 key 永久堆积,内存只增不减

空对象引发的内存爆炸风险 空对象最大的坑不是功能失效,而是被当成“正常缓存”一样放任增长。尤其当接口支持模糊查询、分页参数拼接 key(如 user:search:name:xxx:page:1),攻击者批量请求随机 name,就会生成海量空 key。

典型现象:

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

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

下载
  • INFO memory 显示 used_memory_human 持续上涨,但 db0:keys=1000 却只有几百个“有效 key”
  • redis-cli --bigkeys 扫出大量小 value(几十字节)、高 TTL 的 key,名字带明显规律(如含 id=9999999)
  • RDB/AOF 文件体积异常膨胀,备份恢复变慢

缓解手段:

  • 加前缀隔离:给空对象 key 加独立命名空间,如 empty:user:123,方便单独清理或监控
  • 限速+采样:对高频空返回的 key(如 1 分钟内超 10 次),临时拒绝或降级,不写缓存
  • 定期扫描清理:用 SCAN 配合 TYPE 和 TTL 找出长期未访问的空 key,脚本定时剔除

比空对象更稳的替代方案 空对象是“补漏”,不是“根治”。真正高并发、高敏感的系统,通常组合使用:

布隆过滤器(Bloom Filter)前置校验:请求先过本地或 Redis Module 的布隆过滤器,大概率拦截无效 key。注意它有误判率(false positive),但绝不会漏判(false negative)

  • 初始化需加载全量有效 key,适合数据相对静态的场景(如商品 ID、用户 UID)
  • 不适用动态生成 key(如时间戳、UUID)或高频变更数据

逻辑过期 + 空值标记:查 DB 返回 null 时,不直接缓存空值,而是缓存一个带过期字段的对象(如 {"data": null, "expire_at": 1717023456}),应用层解析后自行判断是否需重建

  • 避免空 key 占用独立 slot,降低 Redis 内存碎片
  • 需要客户端多一层解析逻辑,但更可控
空对象本身很简单,难的是怎么让它不变成内存黑洞——关键不在“存不存”,而在“谁来管、存多久、坏了怎么收场”。

热门AI工具

更多
二狗PPT
二狗PPT Hot

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

WorkBuddy

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

SkildArt
SkildArt Hot

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

讯飞绘文

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

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

Laper
Laper Hot

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

DeepSeek

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

豆包大模型

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

讯飞智作

讯飞智作是一款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中文网欢迎大家前来学习。

4115

2023.11.14

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

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

7652

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等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

7582

2024.04.07

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

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

1160

2024.04.07

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

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

1136

2024.04.07

Playwright 测试失败怎么办
Playwright 测试失败怎么办

Playwright测试失败专题汇集超时、定位器匹配、浏览器提前关闭、依赖与插件配置、文件上传、SSL及Docker启动等故障文章,并介绍通过截图、报告和Trace定位错误。

0

2026.10.21

热门下载

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

精品课程

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

共0课时 | 0人学习

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

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