正在加载中,请稍后

Redis缓存异常小结及布隆过滤器

Redis缓存异常小结

缓存雪崩

缓存雪崩是指缓存同一时间大面积失效,所以后面的请求会直接落在数据库上,造成数据库短时间内承受大量请求而崩溃。

解决方案

  1. 缓存数据的过期时间设置成随机,防止同一时间大量数据过期。

  2. 热点key设置为不过期。

  3. 并发量并不多时,使用加锁排队方案

缓存穿透

缓存穿透是指当一个数据在数据库和缓存中都没有时,此时大量请求来访问该数据,会导致所以请求都落在数据库上,导致数据库崩溃。

解决方案:

  1. 从数据库未找到数据就返回null,储存在缓存中,并设置较短的过期时间。

  2. 布隆过滤器。

缓存击穿

大量的并发请求访问一个热点数据,恰巧这时热点数据过期了,请求直接到达数据库,造成崩溃。

解决方案:

  1. 设置热点数据不过期

  2. 加互斥锁

缓存预热

当系统上线时,提前将热点数据加入到缓存中,防止上线后大量请求过来,直接到达数据库,造成崩溃。

解决方案:

  1. 数据量小时,可以手动写个脚本添加。
  2. 数据量大时,可以使用定时器功能添加。

布隆过滤器

由一个bit为单位的数组构成,当bit为“1“时,代表存在,为“0”代表不存在。

image

假如这时判断c是否存在,计算的c的hash值为(136),通过上图可知,1存在,3不存在,6存在,出现了一个不存在,所以c就一定不存在于数组中。

那是否可以证明a(146)一定存在呢?不可以的。因为(146)可能是其他的值的hash凑成的,例如b(245), d(126)他们两个就满足146存在,但是不能证明a(146)存在。

布隆过滤器只能判断某一个值一定不存在,而不能判断某个值存在。

在redis缓存中的作用

将数据库中所有的查询条件,放入布隆过滤器中,当一个查询请求过来时,先经过布隆过滤器进行查,如果判断请求查询值存在,则继续查;如果判断请求查询不存在,直接丢弃。

posted @ 2021-05-11 14:34  wode虎纹猫  阅读(143)  评论(0)    收藏  举报
Live2D