前言
发明这几个词的人就NM像个脑瘫儿,铁弱智。有问题就说明问题,整些个自创的名词真的恶心。
前置知识回顾
缓存就是为了减轻数据库的压力。
请求——>缓存——>数据库
直白讲,要是缓存里有,就不用去数据库再查一遍了。
名词解释
缓存穿透:
要查询的数据根本就不存在,这里的不存在说的是数据库里本身就没有。
比如一张表里的自增ID才到100,但大量请求查询id=200
缓存击穿:
要查询的数据存在,数据库里有,缓存里也有。
但是我们往往在setKey的时候都会设置时间。
如果这个key属于热点数据,那么在这个key过期的一瞬间,大量请求就会直达数据库。
缓存雪崩:
某一时刻发生大规模的缓存失效。
真鸡儿奇怪,翻翻网上的资料博客,很多都在那举缓存服务宕机的例子。
爷就笑了,那你直接说缓存服务不可用就行了,非要起个[雪崩]的名字,还搁那copy呢?
我的理解:
我们假定,发明缓存雪崩这个名词的人,他的意思是:某一时刻发生大规模的缓存失效。
那么就最少最少存在2种情况,雪崩发生时,缓存服务是否宕机?
1、如果宕机
这就叫缓存服务不可用问题。
考点和知识点是如何搭建高可用缓存服务。
2、如果没宕机
那就是你缓存服务中的key出现了同时的大面积的过期失效。
考点和知识点是热点数据集中失效问题。
问题解决
缓存穿透:缓存控对象 or 布隆过滤器
缓存击穿:分布式锁
热点数据集中失效:key过期时间+随机值,让过期时间错开。
宕机:请自行研究如何搭建高可用缓存服务,以及业务接口的限流和降级。