Redis缓存穿透、缓存击穿、缓存雪崩

Redis缓存穿透、缓存击穿、缓存雪崩
最新回答
魔仙女王

2026-05-20 19:23:31

Redis缓存穿透、缓存击穿、缓存雪崩

Redis作为后台数据库的缓存,能有效处理大部分热点访问请求,但使用过程中可能面临缓存穿透、缓存击穿和缓存雪崩问题。

缓存穿透

当大量查询请求未命中缓存,导致频繁访问后台数据库,使数据库负载压力增大的现象称为缓存穿透。

  • 引起原因:黑客大量访问不存在的key,数据库需处理大量无效请求。

  • 解决方法:

    无效key缓存:数据库查询key不存在时,将该key缓存到Redis,value设为NULL。此方法对固定无效key的攻击有效,但若攻击key随机生成,仍会引发缓存穿透。

    布隆过滤器:过滤不存在的key。判定为true时,key可能存在;判定为false时,key一定不存在。

缓存击穿

当Redis中存在大量请求并发访问的极热点数据,该数据突然失效导致缓存未命中,引发频繁访问后台数据库的现象称为缓存击穿。

  • 引起原因:缓存上的极热点数据突然失效。

  • 解决方法:

    设置永不过期:对极热点key设置永不过期,避免数据失效。

    使用互斥锁:缓存失效时,只有拿到锁的请求才能查询数据库,降低同时访问数据库的请求量,防止数据库崩溃,但会导致系统性能变差。

缓存雪崩

当某一时刻发生大规模缓存失效,如缓存服务宕机、大量key同时过期,导致大量请求直接打到数据库上,可能使整个系统崩溃的现象称为缓存雪崩。若运维重启宕机的数据库,大量新请求流量到来,可能再次引起数据库宕机。

  • 可能原因:

    Redis宕机、重启。

    大量数据使用同一过期时间。

  • 解决方法:

    引入随机性:在原有缓存失效时间上加随机值,避免大量数据同时失效。

    限流熔断:通过请求限流、熔断机制、服务降级等手段,降低服务器负载。

    高可用设计:实现缓存组件高可用,防止单点故障、机器故障、机房宕机等问题。

    提高容灾能力:提高数据后台数据库的容灾能力。