跳到主要内容

简述缓存雪崩?如何避免?

参考答案:

缓存雪崩是指当缓存中的数据大量失效或无法访问时,大量的请求会同时穿透缓存直接访问数据库,导致数据库承受巨大的压力,甚至可能引发数据库宕机。这种现象就像雪崩一样,一开始只有少量的缓存失效,但随着时间的推移,越来越多的缓存失效,最终导致整个系统的崩溃。

要避免缓存雪崩,可以采取以下几种策略:

  1. 合理设置缓存失效时间:将缓存的失效时间分散开,避免同时失效。可以在原有的失效时间基础上,加上一个随机的时间偏移,或者使用带有范围的失效时间。
  2. 采用永不过期策略:对于热点数据,可以考虑使用永不过期的策略,即在缓存中永远不主动删除,而在数据更新时手动刷新缓存。这样可以避免大量缓存同时失效的情况。
  3. 使用多级缓存:引入多级缓存架构,例如本地缓存、分布式缓存(如Redis)、全局缓存(如CDN)。这样即使一个级别的缓存失效,其他级别的缓存仍然可以提供服务,降低缓存雪崩的风险。
  4. 缓存存储高可用:例如使用Redis集群,防止某台Redis挂掉之后所有缓存丢失导致的雪崩问题。
  5. 服务限流和接口限流:如果服务和接口都有限流机制,就算缓存全部失效了,但是请求的总量是有限制的,可以在承受范围之内,这样短时间内系统响应慢点,但不至于挂掉,影响整个系统。
  6. 从数据库获取缓存需要的数据时加锁控制:本地锁或者分布式锁都可以。这样可以防止多个请求同时穿透缓存去数据库查询,进一步减轻数据库的压力。

以上策略可以根据实际业务场景和需求进行选择和组合,以最大程度地避免缓存雪崩的发生。