Redis缓存穿透与雪崩解决方案?

2021-03-19 16:54发布

17条回答
收获很多
2021-03-22 13:35

回答这个问题之前先来说一下什么是缓存穿透与雪崩:

缓存穿透,就是说去查询一个缓存和数据库中都没有的数据,正常使用缓存的流程应该是,数据查询先进行缓存查询,如果key不存在或者已经过期的话再去数据库中查询,并把查询到的对象放进缓存中,如果查询数据库也为空就不放入缓存。如果查询一个根本不存在的key,就必然会每次都去查询数据库,而且每次的查询结果都是空,每次都不会进行缓存,所以我觉得这种情况一般是恶意攻击,可能会利用这个漏洞对数据库造成压力,甚至会压垮数据库。

这个怎么解决呢,接口一定要做好校验,也可以将key存为key-null

缓存雪崩呢,就是缓存在同一时间大面积失效导致的请求直接去访问数据库,给数据库造成过大压力,数据连接出现异常。

解决方法呢,就是给缓存设置不同的有效期,最有效的办法还是搭建集群,缓存失效后,可以通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待,不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀一些。


一周热门 更多>