redis缓存穿透缓存雪崩

redis工作原理

首先我们先说一下redis的工作原理,redis本质就是为了缓解数据库的压力,在查询时先看一下redis中有没有,如果有的话直接在redis中查找,这样就不需要去数据库中查询,减小了数据库的压力。

缓存雪崩

那什么是缓存雪崩呢,其实就是redis中存储的数据大面积的到期,导致原本可以走redis查询的语句现在大面积的走了数据库,导致数据库的压力增大,这就是缓存雪崩,还有另外一种情况就是redis挂掉了,导致大量查询数据库

解决办法

其实只要知道了缓存雪崩的产生原因我们就很好解决了
1.将缓存时间设置为随机值或者间隔开,不要让他们在同一时间大量过期
2.对于redis挂掉这种情况我们在解决时,首先可以考虑设置主从架构,哨兵模式,防止redis挂掉,如果 还是挂掉了,我们可以使用hystrix让他走降级,保证核心业务可用,同时我们也可以将redis持久化,在redis挂掉重启以后让他快速恢复数据。

缓存穿透

什么是缓存穿透呢?
官方是这样说的:缓存穿透是指查询一个一定不存在的数据。由于缓存不命中,并且出于容错考虑,如果从数据库查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,失去了缓存的意义。
通俗来说:就相当于我在表中有个年龄字段,在请求时有人一直请求age等于负数,这样就导致在请求中在redis中查询,查询不到,又到数据库中查询一次,还是不存在,返回空值,这样就造成了两次的无效查询。
这就是缓存穿透
请求的数据在缓存大量不命中,导致请求走数据库。
缓存穿透如果发生了,也可能把我们的数据库搞垮,导致整个服务瘫痪!

解决办法

解决缓存穿透也有两种方案:

1、由于请求的参数是不合法的(每次都请求不存在的参数),于是我们可以使用布隆过滤器(BloomFilter)或者压缩filter提前拦截,不合法就不让这个请求到数据库层!
2.当我们从数据库找不到的时候,我们也将这个空对象设置到缓存里边去。下次再请求的时候,就可以从缓存里边获取了。
这种情况我们一般会将空对象设置一个较短的过期时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值