Redis缓存穿透、击穿、雪崩,及解决方案
Redis缓存穿透、击穿、雪崩,及解决方案
一、概念
缓存穿透:缓存和数据库中都没有数据,每次查询缓存都无法命中,导致每个请求都会落在数据库上。
缓存击穿:某一个热点数据接收大量请求,这个key突然过期的瞬间,大量的请求会落在数据库上。
缓存雪崩:大量缓存同一时间集中失效,大量的请求直接落在数据库上,数据库的压力瞬间上升,甚至挂掉。
二、缓存穿透解决方案
1、接口层增加校验,比如用户鉴权校验,参数做校验,不合法的参数直接代码Return。
2、把Key的Value写为null、位置错误等其他值,设置一个较短的过期时间,例如60s。
3、布隆过滤器(Bloom Filter)
三、缓存击穿解决方案
为热点数据设置为永不过期,然后加一个互斥锁保证缓存的单线程写。
四、缓存雪崩解决方案
1、热点数据的过期时间加上一个随机数。
2、热点数据设置永不过期:
(1)有更新操作则同步更新缓存。
(2)把过期时间存在value里,通过一个后台的异步线程进行缓存的更新。
3、在缓存失效后,通过互斥锁来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。
本文来自博客园,作者:百成,转载请注明原文链接:https://www.cnblogs.com/baicheng/p/15803034.html