1. 这几个名词天天提,偶尔也背过但是每次都是忘掉,这里我开篇先自己尝试解释一下这三个名词的意思:
  • 缓存穿透:额,这个回忆不起来了。
  • 缓存击穿:击穿强调是不是一个点的概念,查询不存在的缓存?
  • 缓存雪崩:一大片缓存都失效或Redis直接崩掉?

    缓存穿透

    image.png

    是什么

    上图已经形象的描述出穿透的含义了,Redis缓存压根就不可能存在所要查询数据的key值,Redis就像是被开了一个通道,这样的请求直接无视Redis的。

    解决方式

    加强对入参的校验

    比如用户查询ID为-1的信息,ID从1开始自增,那肯定没有这样的数据。在接到-1这个值时就直接返回错误信息。

对无结果的请求缓存一个null值

比如用户查询ID为-1的信息,数据库中没有,此时在Redis中缓存一个 (-1:null)这样下次再有此类请求就直接走缓存
(-1:null)这对值不可设置时间过长。防止此key在后续业务操作中DB中真的有值了。

布隆过滤器存在性校验

通过布隆过滤器对查询的内容进行判断,是否存在相应数据。这层过滤器,作者认为应该加到,Redis查询后,DB查询前

访问控制

用户查询这种无值数据时,且大批量查询时。那大概率是想搞我们的,于是我们可以直接封他的IP防止他恶意破坏

缓存击穿

image.png

是什么

击穿说明缓存有,但是被请求穿过去了。就是某个缓存失效了。导致请求这一数据的众多请求打到了DB上。

解决方式

缓存预热

当大量请求过来前,提前重置热点数据的过期时间。

互斥锁

保证缓存的构建由大量请求中的某一个请求完成,只有其走DB,其他全都走缓存

缓存雪崩

image.png

是什么

Redis崩掉或者大片key过期

解决方式

均匀设置Key的过期时间

将缓存过期时间分散开来设置,避免同时过期的情况

分布式锁

保证同一条数据值构建一次缓存

集群搭建

搭建一个高可用集群