Redis数据库专题017---缓存穿透、击穿、雪崩介绍

redis缓存穿透:

缓存访问的基本流程

(1)应用访问缓存,假如数据存在,则直接返回数据

(2)数据在redis不存在,则去访问数据库,数据库查询到了直接返回应用,同时把结果写回redis

(3)数据在redis不存在,数据库也不存在,返回空,一般来说空值是不会写入redis的,如果反复请求同一条数据,那么则会发生缓存穿透

解决方案是可以为这个key设置一个空值,同时写入redis,下次请求的时候就不会访问数据库,但是如果每次请求的是不同的key,同时这个key在数据库中也是不存在的,那这样依然会发生缓存穿透。

因此引入了布隆过滤器:先判断key值是否存在,如果不存在,则不访问redis,那这样就可以拦截大量的请求,布隆过滤器恰好可以实现这样的需求。

布隆过滤器,Bloom Filter是1970年由Bloom提出的,它是由一组哈希(Hash)函数和一个位阵列组成。布隆过滤器可以用于查询一个元素是否存在于一个集合当中,查询结果为以下二者之一:

这个元素可能存在于这个集合当中。

这个元素一定不存在于这个集合当中。

布隆过滤器的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。

布隆过滤器在实际中主要用来解决网页URL去重复,垃圾邮件检测,大集合中重复元素判断和缓存击穿等问题。布隆过滤器只能增加不能删除。布隆过滤器添加的集中方式。

redis缓存雪崩:

大量的key同时到期的时候容易发生。两种情况:①零点直接雪崩  ②时间性无关联

最终解决方案的大方向:熔断、限流、隔离

临时的小方案:不同的key设置不同的超时时间

 

redis缓存击穿:

缓存击穿是指一个Key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个Key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在一个完好无损的桶上凿开了一个洞

 

 

猜你喜欢

转载自blog.csdn.net/LB_Captain/article/details/114537219