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

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

无效key缓存:数据库查询key不存在时,将该key缓存到Redis,value设为NULL。此方法对固定无效key的攻击有效,但若攻击key随机生成,仍会引发缓存穿透。
布隆过滤器:过滤不存在的key。判定为true时,key可能存在;判定为false时,key一定不存在。
当Redis中存在大量请求并发访问的极热点数据,该数据突然失效导致缓存未命中,引发频繁访问后台数据库的现象称为缓存击穿。

设置永不过期:对极热点key设置永不过期,避免数据失效。
使用互斥锁:缓存失效时,只有拿到锁的请求才能查询数据库,降低同时访问数据库的请求量,防止数据库崩溃,但会导致系统性能变差。
当某一时刻发生大规模缓存失效,如缓存服务宕机、大量key同时过期,导致大量请求直接打到数据库上,可能使整个系统崩溃的现象称为缓存雪崩。若运维重启宕机的数据库,大量新请求流量到来,可能再次引起数据库宕机。
Redis宕机、重启。
大量数据使用同一过期时间。

引入随机性:在原有缓存失效时间上加随机值,避免大量数据同时失效。
限流熔断:通过请求限流、熔断机制、服务降级等手段,降低服务器负载。
高可用设计:实现缓存组件高可用,防止单点故障、机器故障、机房宕机等问题。
提高容灾能力:提高数据后台数据库的容灾能力。