【413、有没有遇到过缓存被击穿的情况】

109 阅读1分钟

缓存被击穿是指一个非常热点的 key 在缓存过期的瞬间,同时有大量的并发请求访问该 key,这些请求会穿过缓存直接访问数据库,导致数据库压力剧增,可能会导致数据库宕机。

简单介绍下一些解决缓存被击穿的方法:

  1. 加锁:在缓存失效的瞬间,对数据库的查询操作加上锁,这样其他并发请求就需要等待锁的释放才能进行查询,可以避免大量并发请求同时查询数据库,但是这种方法可能会导致性能瓶颈。
  2. 异步刷新:当缓存失效的时候,不直接去查询数据库,而是先将缓存失效的消息放入消息队列中,然后异步去查询数据库,将查询到的数据更新到缓存中,这样可以避免大量并发请求同时查询数据库,但是需要考虑消息队列的可靠性和消息的时效性。
  3. 本地缓存雪崩:在高并发场景下,为了避免大量并发请求同时访问数据库,可以在本地缓存中增加一个随机的过期时间,使得缓存的过期时间分散开来,从而避免出现大量的缓存同时失效的情况。
  4. 限流:在缓存失效的瞬间,可以通过限流的方式,控制并发请求的数量,从而避免大量请求同时访问数据库,导致数据库压力过大。

需要根据具体场景进行选择和组合使用,以达到最好的缓存性能和可用性。