2021年8月

缓存出现的一些错误现象

(1) 缓存穿透
请求一些缓存和数据库都不存在的值,会导致数据库崩溃,
解决方案
a.缓存空值
b.布隆过滤器
(2) 缓存击穿
大量请求某一个key的时候,key正好失效从而导致,请求全部到了数据库,
与缓存穿透的区别
缓存穿透是请求的不存在的key
缓存击穿是请求存在的key,而key恰哈失效

解决方案
上面的现象是多个线程同时去查询数据库的这条数据,那么我们可以在第一个查询数据的请求上使用一个 互斥锁 来锁住它。其他的线程走到这一步拿不到锁就等着,等第一个线程查询到了数据,然后做缓存。后面的线程进来发现已经有缓存了,就直接走缓存。

(3) 缓存雪崩
缓存雪崩的情况是说,当某一时刻发生大规模的缓存失效的情况,比如你的缓存服务宕机了或者有多个key同时过期,会有大量的请求进来直接打到DB上面。结果就是DB 撑不住,挂掉。