Redis缓存穿透、击穿、雪崩,及解决方案

Redis缓存穿透、击穿、雪崩,及解决方案

一、概念

缓存穿透:缓存和数据库中都没有数据,每次查询缓存都无法命中,导致每个请求都会落在数据库上。

缓存击穿:某一个热点数据接收大量请求,这个key突然过期的瞬间,大量的请求会落在数据库上。

缓存雪崩:大量缓存同一时间集中失效,大量的请求直接落在数据库上,数据库的压力瞬间上升,甚至挂掉。

二、缓存穿透解决方案

1、接口层增加校验,比如用户鉴权校验,参数做校验,不合法的参数直接代码Return。

2、把Key的Value写为null、位置错误等其他值,设置一个较短的过期时间,例如60s。

3、布隆过滤器(Bloom Filter)

三、缓存击穿解决方案

为热点数据设置为永不过期,然后加一个互斥锁保证缓存的单线程写。

四、缓存雪崩解决方案

1、热点数据的过期时间加上一个随机数。

2、热点数据设置永不过期:

(1)有更新操作则同步更新缓存。

(2)把过期时间存在value里,通过一个后台的异步线程进行缓存的更新。

3、在缓存失效后,通过互斥锁来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。

posted @ 2022-01-14 18:27  百成  阅读(128)  评论(0编辑  收藏  举报