【631、缓存穿透和缓存雪崩的区别,解决办法】

62 阅读2分钟

缓存穿透和缓存雪崩都是常见的缓存问题,但它们的原因和解决方法不同。

缓存穿透是指查询一个不存在的数据,由于缓存中没有对应的值,请求会穿过缓存层,直接查询数据库或其他后端服务,这样会造成后端服务的压力增大,进而导致系统崩溃。解决办法可以有以下几种:

  1. 布隆过滤器:将所有可能存在的数据哈希到一个足够大的 bitmap 中,一个一定不存在的数据会被这个 bitmap 拦截掉,从而避免了对底层存储系统的查询压力。
  2. 缓存空对象:将查询得到的空结果缓存起来,在一定时间内直接返回空结果,避免对底层存储系统的查询压力。
  3. 限流:对疑似攻击的请求进行限流,如根据 IP 地址限制请求次数等。

缓存雪崩是指缓存中的大量数据在同一时间过期失效,导致所有请求都直接访问后端存储系统,从而导致系统瘫痪。解决办法可以有以下几种:

  1. 设置不同的过期时间:将缓存的过期时间设置成随机值,避免缓存同时失效。
  2. 限流和熔断:对请求进行限流或熔断,避免请求过多导致系统崩溃。
  3. 分布式锁:使用分布式锁,在缓存失效的瞬间,只允许一个请求去查询数据库,其他请求等待缓存的更新。

总之,避免缓存穿透和缓存雪崩是非常重要的,在实际开发中可以结合多种方法来保障系统的稳定性。