Redis缓存异常小结及布隆过滤器
Redis缓存异常小结
缓存雪崩
缓存雪崩是指缓存同一时间大面积失效,所以后面的请求会直接落在数据库上,造成数据库短时间内承受大量请求而崩溃。
解决方案:
-
缓存数据的过期时间设置成随机,防止同一时间大量数据过期。
-
热点key设置为不过期。
-
并发量并不多时,使用加锁排队方案
缓存穿透
缓存穿透是指当一个数据在数据库和缓存中都没有时,此时大量请求来访问该数据,会导致所以请求都落在数据库上,导致数据库崩溃。
解决方案:
-
从数据库未找到数据就返回null,储存在缓存中,并设置较短的过期时间。
-
布隆过滤器。
缓存击穿
大量的并发请求访问一个热点数据,恰巧这时热点数据过期了,请求直接到达数据库,造成崩溃。
解决方案:
-
设置热点数据不过期
-
加互斥锁
缓存预热
当系统上线时,提前将热点数据加入到缓存中,防止上线后大量请求过来,直接到达数据库,造成崩溃。
解决方案:
- 数据量小时,可以手动写个脚本添加。
- 数据量大时,可以使用定时器功能添加。
布隆过滤器
由一个bit为单位的数组构成,当bit为“1“时,代表存在,为“0”代表不存在。

假如这时判断c是否存在,计算的c的hash值为(136),通过上图可知,1存在,3不存在,6存在,出现了一个不存在,所以c就一定不存在于数组中。
那是否可以证明a(146)一定存在呢?不可以的。因为(146)可能是其他的值的hash凑成的,例如b(245), d(126)他们两个就满足146存在,但是不能证明a(146)存在。
布隆过滤器只能判断某一个值一定不存在,而不能判断某个值存在。
在redis缓存中的作用
将数据库中所有的查询条件,放入布隆过滤器中,当一个查询请求过来时,先经过布隆过滤器进行查,如果判断请求查询值存在,则继续查;如果判断请求查询不存在,直接丢弃。
浙公网安备 33010602011771号