redis-击穿、穿透、雪崩

击穿、穿透、雪崩经常听人说吧? 那他到底是啥呢?无非就是在有缓存层的情况下,对各种绕过缓存层从而直接落到了DB上的情况进行的分类。

概念性的东西大概如下,我是记不住,后期具体使用与规避这些问题才是大事,后面有机会更新吧。

  1. 击穿(Cache Penetration)
    定义: 击穿是指请求的数据在缓存中永远找不到,导致请求直接落到数据库上。这种情况通常是由于某些恶意请求或者程序错误导致的,请求的 key 本身是无效的,或者根本不存在。
    原因:
    恶意请求:攻击者故意请求不存在的 key。
    程序错误:代码逻辑错误,生成了无效的 key。
    解决方案:
    布隆过滤器:使用布隆过滤器预先判断 key 是否存在,如果布隆过滤器返回不存在,则直接返回空结果,不再查询数据库。
    缓存空值:对于查询不到的数据,也缓存一个空值(例如 null),并设置一个较短的过期时间,防止频繁查询数据库。
    验证参数:在接口层增加校验,不合法的参数直接返回。
    黑名单:设定一个合理的阈值,当某个IP的请求次数超过阈值时,将其加入黑名单,限制其访问频率或直接拒绝其请求。
  2. 穿透(Cache Miss)
    定义: 穿透是指缓存中某个 key 失效或被删除,导致请求绕过缓存层直接访问数据库。这种情况通常是正常的缓存过期或缓存被主动删除导致的。
    原因:
    缓存过期:缓存中的数据超过了设定的过期时间。
    主动删除:缓存中的数据被主动删除,例如在更新数据库后删除缓存。
    解决方案:
    缓存预热:在系统启动时或定期预热缓存,提前加载常用数据。
    异步加载:当缓存未命中时,可以异步加载数据并更新缓存,避免所有请求同时访问数据库。
  3. 雪崩(Cache Avalanche)
    定义: 雪崩是指大量缓存 key 同时失效,导致大量请求同时绕过缓存层直接访问数据库,造成数据库压力剧增,甚至崩溃。这种情况通常是由于缓存过期时间设置不合理或突发的高并发请求导致的。
    原因:
    缓存过期时间集中:多个缓存 key 设置了相同的过期时间,导致同时失效。
    突发高并发:短时间内大量请求同时访问数据库。
    解决方案:
    随机过期时间:为缓存 key 设置随机的过期时间,避免大量 key 同时失效。
    限流降级:在高并发情况下,使用限流和降级策略,限制请求频率,保护数据库。
    缓存预热:在系统启动时或定期预热缓存,提前加载常用数据。
    多级缓存:使用多级缓存策略,例如本地缓存 + 分布式缓存,减少对数据库的直接访问。

个人理解

  • 击穿: 请求的数据在缓存里永远找不到,请求绕过缓存层
  • 穿透:部分key失效或被删除,请求绕过缓存层
  • 雪崩:所有缓存key同时失效,所有请求全部绕过缓存层
相关推荐
江晓鱼未暖31 分钟前
十七、Redis 核心原理与架构详解
大数据·数据库·数据仓库·redis·缓存·架构
copyer_xyf32 分钟前
PostgreSQL 做向量检索:一条单库路线
数据库·agent·nestjs
Access开发易登软件36 分钟前
Access 怎么做前后端分离?用 Web API 读写 SQL Server
前端·数据库·人工智能·microsoft·excel·access
Juicedata40 分钟前
腾讯云 x JuiceFS:基于 FoundationDB 的企业级统一存储实践
数据库·人工智能·科技·云计算·腾讯云
小罗水1 小时前
第13章 Redis 缓存、幂等锁与任务状态
数据库·redis·缓存
SelectDB技术团队1 小时前
当 PostgreSQL 面临性能瓶颈:80TB 电商业务迁移至 Apache Doris 的实践思考
数据库·postgresql·apache
热心市民lcj1 小时前
Spring Boot 整合 Caffeine 本地缓存实战
spring boot·后端·缓存
心念枕惊1 小时前
新写了个直播录制工具,可录制抖音快手斗鱼直播
运维·服务器·数据库
逐米时代1 小时前
向量数据库选型——Chroma、Qdrant、Milvus到底怎么选
数据库·milvus
段一凡-华北理工大学2 小时前
AI推动工业智能化转型~系列文章05:特征工程:工业 AI 的第一生产力
数据库·人工智能·分布式·搜索引擎·特征工程·高炉智能化