Redis-几个查询问题

leard 发布于 2025-06-07 1 次阅读


缓存击穿

某个数据失效,瞬间大量请求查询数据库,导致数据库崩溃。

解决方法:

  • 加互斥锁,使没有缓存或者缓存失效的情况下,同一时间只有一个请求,防止数据库压力过大
  • 热点数据不设置过期时间,后台异步更新数据

缓存穿透

查询一个不存在的数据,大量请求查询数据库,增加数据库负担。

解决方法:

  • 禁止非法请求
  • 使用布隆过滤器,如果判断不存在,直接返回
  • 缓存空值并设置短暂的过期时间,把不存在的数据也缓存起来

缓存雪崩

多个数据同时失效,导致大量请求查询数据库,增加数据库负担或者崩溃。

解决方法:

  • 过期时间随机化,避免同一时间大量缓存失效
  • 加互斥锁,使没有缓存或者缓存失效的情况下,同一时间只有一个请求,防止数据库压力过大
  • 缓存预热
  • 多级缓存
  • 服务熔断,暂停返回数据