网站首页 > 精选文章 正文
一、缓存穿透(Cache Penetration)
问题本质
请求的数据在 缓存和数据库都不存在,大量无效请求绕过缓存直接访问数据库。
核心场景
- 恶意攻击(如爬虫高频请求无效 ID)。
- 业务误操作(如错误参数或未初始化数据)。
风险点
数据库可能被无效请求压垮。
解决方案
- 布隆过滤器(Bloom Filter)
在缓存前加一层布隆过滤器,快速判断数据是否存在。
优点:内存占用极低,判断速度快。
缺点:存在误判率(可通过调整哈希函数和位数组大小优化)。
实现示例:python
2.缓存空值(Cache Null)
即使数据库无数据,也缓存空值(如 key:null),并设置较短过期时间(如 1-5 分钟)。
注意:需定期清理无效空值,避免长期占用内存。
3.请求拦截
对参数合法性校验(如 ID 必须为数字、长度限制等)。
结合业务规则过滤明显非法请求(如黑名单 IP)。
二、缓存击穿(Cache Breakdown)
问题本质
热点数据突然过期,大量并发请求直接穿透到数据库。
核心场景
- 明星八卦、秒杀商品等瞬时热点数据。
- 缓存过期后,突发高并发查询。
风险点
数据库因突发流量崩溃。
解决方案
- 互斥锁(Mutex Lock)
当缓存失效时,通过分布式锁(如 Redis 的 SETNX)控制仅一个线程查询数据库,其他线程等待后重试。
实现示例:java
2.逻辑过期时间
缓存永不过期,但存储数据时附加一个逻辑过期时间字段。
后台线程异步检测并更新过期数据。
3.缓存预热(Cache Warm-Up)
在高峰前提前加载热点数据到缓存(如大促前加载秒杀商品)。
结合监控系统识别热点数据(如统计访问频次)。
三、缓存雪崩(Cache Avalanche)
问题本质
大量缓存同时失效 或 Redis 服务宕机,导致所有请求直达数据库。
核心场景
- 缓存设置相同过期时间(如默认 TTL=24h)。
- Redis 主节点故障(如网络分区、硬件故障)。
风险点
数据库被海量请求直接击溃。
解决方案
- 分散过期时间
在基础 TTL 上增加随机值(如 TTL = base_time + random(0, 300s))。
示例代码:python
2.高可用架构
Redis 集群:分片存储数据,避免单点故障。
主从复制 + 哨兵模式:自动故障转移,保障服务可用性。
多级缓存:结合本地缓存(如 Caffeine)+ Redis,降低 Redis 压力。
3.服务降级与熔断
当检测到缓存失效时,启用降级策略(如返回默认值、限流排队)。
使用熔断框架(如 Hystrix、Sentinel)保护数据库。
四、总结与对比
问题类型 | 触发条件 | 核心思路 | 典型方案 |
缓存穿透 | 数据不存在 | 拦截无效请求 | 布隆过滤器、缓存空值、参数校验 |
缓存击穿 | 热点数据失效 + 高并发 | 控制单线程重建缓存 | 互斥锁、逻辑过期、缓存预热 |
缓存雪崩 | 批量缓存失效或服务宕机 | 分散风险 + 保障高可用 | 随机 TTL、集群架构、降级熔断 |
五、实战建议
- 监控与告警
监控缓存命中率、数据库 QPS,设置阈值告警。
- 压测与预案
定期模拟高并发场景,验证降级策略和熔断机制。
- 代码防御
在数据访问层统一封装缓存逻辑,避免裸调数据库。
通过合理设计缓存策略和兜底机制,可显著提升系统的抗压能力和稳定性。
- 上一篇: 使用Redis,你必须知道的21个注意要点
- 下一篇: 一文清晰了解-什么是Redis?能干什么?
猜你喜欢
- 2025-03-19 一直写写写,Redis内存耗尽,会发生什么?
- 2025-03-19 Redis高并发场景下的最佳实践(redis解决高并发的原理)
- 2025-03-19 Redis存取架构及命令详解(redis存储命令)
- 2025-03-19 开源推荐:如何实现的一个高性能 Redis 服务器
- 2025-03-19 Java面试 | 关于Redis 的面试题(有关redis的面试题)
- 2025-03-19 在nodejs中使用Redis缓存和查询数据及Session
- 2025-03-19 看完这篇文章你就知道Redis是什么了?
- 2025-03-19 一分钟了解Redis淘汰策略(redis 淘汰策略有哪些?)
- 2025-03-19 一文清晰了解-什么是Redis?能干什么?
- 2025-03-19 使用Redis,你必须知道的21个注意要点
- 05-22如何基于Docker和Jenkins打造面向初创公司的持续集
- 05-22Flutter无脑入门-从零到第一个APP
- 05-22git 子模块
- 05-22我见过的最糟糕代码
- 05-22掌握这 20 个 Git 命令,成为团队协作高手!
- 05-22gitflow的工作流
- 05-22Git详细使用教程
- 05-22git版本管理总有问题,建议使用git flow
- 最近发表
- 标签列表
-
- 向日葵无法连接服务器 (32)
- git.exe (33)
- vscode更新 (34)
- dev c (33)
- git ignore命令 (32)
- gitlab提交代码步骤 (37)
- java update (36)
- vue debug (34)
- vue blur (32)
- vscode导入vue项目 (33)
- vue chart (32)
- vue cms (32)
- 大雅数据库 (34)
- 技术迭代 (37)
- 同一局域网 (33)
- github拒绝连接 (33)
- vscode php插件 (32)
- vue注释快捷键 (32)
- linux ssr (33)
- 微端服务器 (35)
- 导航猫 (32)
- 获取当前时间年月日 (33)
- stp软件 (33)
- http下载文件 (33)
- linux bt下载 (33)