对缓存穿透、缓存击穿、缓存雪崩的理解

对缓存穿透、缓存击穿、缓存雪崩的理解

一、缓存击穿
redis做缓存用的时候,key过期,或者使用lru、lfu等算法,使key在redis变成冷数据(从来没有访问过的),在redis中淘汰,这时候,大量请求访问这个key,就会穿透redis,到达后端DB,【数据库有,大量并发,redis没有缓存】
在这里插入图片描述

解决方法:所有的请求发现key不存在的时候,再去发出一个请求,去抢一把锁setnx,去给数据加锁,加锁成功的,去访问DB,取得数据后,将数据load进redis中;失败的去睡眠一会,然后再去尝试取数据
二、缓存穿透
穿透:基于缓存:从业务接收到的查询在数据源里根本不存在,也就是说,用户发出的请求先到达redis,然后在redis中找不到数据,然后会击穿redis,到达数据库,如果,用户想要攻击客户端的话,那么统一时刻会发出大量请求到达服务端,会引起事故。
解决方式:
1、布隆过滤器。
2、加锁:所有的请求发现key在redis中不存在的时候,再去发出一个请求,去抢一把锁setnx,去给数据加锁,加锁成功的,去访问DB,取得数据后,将数据load进redis中;失败的去睡眠一会,然后再去尝试取数据。
3、用户请求拿到数据之后,即使是null,也要在redis中先缓存一段时间,也能达到阻挡请求的效果。
布隆过滤器:
由一个全是0和1的数组以及算法组成,元素通过算法算出在数组中映射出的位置,然后将该位置的元素从0改为1,判断一个元素在bloom中存在的方法:同样通过多个布隆算法算出位置,如果位置上都是1,说明该元素存在

布隆过滤器的实现方法:
1)客户端可以自己实现bloom算法,自己承载bitmap;
2)客户端可以自己实现bloom算法,redis实现bitmap;
3) Redis实现bloom.so,实现bitmap(redis集成布隆)
缺点:只能增加,不能删除(空key)既能支持数据到达,能删除
三、缓存雪崩
大量的key同时消失,间接造成大量的访问到达数据库,两种可能:第一种时点性无关:设置过期时间太过集中,导致key在很短时间内失效;第二种:比如说银行每次零点更新数据,那么之前的数据在零点之前必须全部失效
解决:
时点性相关:比如说银行每次零点更新数据,那么之前的数据在零点之前必须全部失效:解决:雪崩时停止服务,加载缓存【强一致性】或者服务先后从数据库中取得数据,在一端时间内逐步替换新数据【弱一致性】

2、时点性无关解决方案:随机过期时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值