ThinkPHP如何防止缓存穿透_ThinkPHP空值缓存策略说明【说明】
PhpStorm 是 JetBrains 推出的专业 PHP 集成开发环境,可在 Mac 上完成代码编写、智能检查、重构、调试、测试和数据库管理。它支持主流 PHP 框架、Composer、Git、Docker 与远程解释器。
说实话,ThinkPHP 默认对查不到的数据返回 null,而问题在于,Cache::get() 一遇到 null 就不会写入缓存——这相当于把缓存穿透的门给敞开了。空值不能直接存 null,必须用占位符加上明确的 TTL 才有效。 为什么 Cache::set('key', null, 300)
说实话,ThinkPHP 默认对查不到的数据返回 null,而问题在于,Cache::get() 一遇到 null 就不会写入缓存——这相当于把缓存穿透的门给敞开了。空值不能直接存 null,必须用占位符加上明确的 TTL 才有效。
为什么 Cache::set('key', null, 300) 没用?
ThinkPHP 的 Redis 驱动在处理序列化时,会直接跳过 null,或者把它转成空字符串,结果就是根本没写进 Redis。更麻烦的是,某些版本里,存 null 会被当作永久缓存——后续的真实数据再也刷不进去,这才是真正的灾难。
- 验证方法很简单:用
redis-cli直接GET key,如果返回(nil)或空响应,说明压根没存成功。 - 如果用的是 file 驱动,写
null会生成非法文件名,静默失败,去runtime/cache/里也找不到对应文件。 - 千万别依赖
Cache::remember()来自动处理空值——它只在回调返回非空时才缓存,空值一样会被漏掉。
空值缓存的正确写法(TP6/7)
所有查询入口必须统一走“先查缓存 → 查不到再查 DB → 无论是否查到都写缓存”这条逻辑,而且空结果必须用可识别的占位符来代替。
- 用
'__NULL__'或json_encode(['_empty' => true])代替null。 - TTL 必须设为短周期(比如
300秒),避免占位符长期残留变成“假缓存”。 - 示例:
Cache::set('user_999999999', '__NULL__', 300)。 - 读取时手动判断:
$data = Cache::get('user_123'); if ($data === '__NULL__') { return null; }。
布隆过滤器怎么和空值缓存配合?
布隆过滤器不是缓存穿透的万能钥匙。它必须和空值缓存协同工作,否则那些漏掉的误判项照样会穿透防线。
- 初始化命令:
BF.RESERVE user_bf 0.01 100000(误差率 1%,预估容量 10w)。 - 记住:只在数据真正写入 DB 后调用
$redis->bfAdd('user_bf', $id),不能在缓存层写入时就加。 - 查询前先
$redis->bfExists('user_bf', $id),返回false就直接返回空,不查缓存也不查 DB。 - 需要注意:
topthink/think-bloom扩展已经多年没更新了,集群模式下会失效,建议直接操作 Redis 命令。
空值缓存的关键不在“存什么”,而在于“所有读取点是否走同一套判断路径”。哪怕漏掉一个接口、一个中间件、一个手动绕过 Cache::get() 的地方,整个防护体系就相当于形同虚设。
Shapr3D是一款面向工业设计、机械工程、建筑概念和三维打印工作流的CAD软件。Mac版采用Parasolid建模内核,支持草图约束、实体建模、工程图、可视化渲染及常见CAD格式交换,并可通过账户在多台设备之间同步项目。
REAPER是Cockos开发的数字音频工作站,提供多轨音频与MIDI录制、剪辑、处理、混音和母带制作工具。Mac版兼容Intel与Apple芯片,支持AU、VST、VST3、CLAP等插件格式,并提供高度可定制的工作流程。
Ableton Live 是面向音乐制作人与现场表演者的数字音频工作站,提供编曲视图、独具特色的现场视图、音频录制、MIDI创作、实时变速、乐器及效果器。Mac版原生支持Apple芯片,并可连接音频接口、MIDI控制器和第三方插件。
Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。














