缓存击穿、雪崩和穿透

缓存穿透

概念:

访问一个不存在的key,缓存不起作用,请求会穿透到DB(数据库),流量大时DB会挂掉

解决方法:

之所以发生穿透,是因为缓存中没有存储这些数据的key,从而每次都查询数据库,我们可以为这些key在缓存中设置对应的值为null,后面查询这个key的时候就不用查询数据库了,(访问key未在DB查询到值,也将空值写进缓存,设置较短过期时间)

缓存击穿

概念:

在高并发的情况下,大量的请求同时查询同一个key时,此时这个key正好失效了,就会导致同一时间,这些请求都会去查询数据库,这样的现象我们称为缓存击穿。

解决方案:

采用分布式锁,每次拿到锁的时候都要去查询一下缓存有没有、查不到缓存的情况下,只有拿到锁的第一个线程去请求数据库,然后插入缓存。

缓存雪崩

概念:

缓存服务或春失效、大量数据访问DB、、当某一时刻发生大规模的缓存失效的情况,缓存在同一时刻全部失效,造成瞬时DB请求量大、压力骤增,引起雪崩。

解决方案:

采用集群,降低服务宕机的概率
可以给缓存设置过期时间时加上一个随机值时间,使得每个key的过期时间分布开来,不会集中在同一时刻失效。

缓存击穿、雪崩和穿透

2020年见