缓存雪崩:

缓存在同一时刻全部失效,造成瞬时DB请求量大、压力骤增,引起雪崩。缓存雪崩通常因为缓存服务器宕机、缓存的 key 设置了相同的过期时间等引起。

缓存击穿:

一个存在的key,在缓存过期的一刻,同时有大量的请求,这些请求都会击穿到 DB ,造成瞬时DB请求量大、压力骤增。

缓存穿透:

查询一个不存在的数据,因为不存在则不会写到缓存中,所以每次都会去请求 DB,如果瞬间流量过大,穿透到 DB,导致宕机。

  • 解决方案:SingleFlight(单次飞行)

无论有多少个并发请求问同一个 Key,在“缓存失效”的那个瞬间,我只放一个请求去查数据库。其他请求全部阻塞等待,等第一个请求查回来,大家共享这个结果。