什么是redis缓存雪崩、缓存穿透、缓存击穿

使用redis缓存的目的

1、为了防止大量用户查询直接打到数据库,将数据库打挂;

2、提升查询效率;

如果redis使用不当,会出现一些异常情况,如缓存雪崩、缓存穿透、缓存击穿。

缓存雪崩

什么是缓存雪崩?

redis缓存KV的时候,会指定缓存失效时间。如果在同一时间对缓存KV设置了相同的缓存失效时间,则到失效时间的时候,请求在redis中已经查不到数据,进而直接请求数据库,由于访问数据库请求突然爆发增长,可能打挂数据库,进而导致其他系统的崩溃。缓存集中失效的场景就是缓存雪崩。

如何避免缓存雪崩?

对缓存失效时间加上随机值,避免缓存的集中失效。

缓存穿透

什么是缓存穿透?

请求先从缓存中找数据,但是缓存中该KV不存在,就从数据库中找,但是数据库中也不存在。查询数据库中不存在的请求就是缓存穿透。缓存穿透一般是请求带着非法参数,直接穿过缓存访问到数据库。比如数据库表的主键是从0自增的,但是攻击者拿着主键-1来请求,缓存中肯定不存在,请求就直接访问到数据库了。

如何避免缓存穿透?

1、对请求做合法值校验、权限校验等,让不合法的请求在访问数据库前就被拦截。

2、使用布隆过滤器,布隆过滤器可以判断key是否在数据库中存在,如果不存在就直接返回。

缓存击穿

什么是缓存击穿?

缓存击穿和缓存雪崩有点像,但是又不完全一致。缓存击穿主要是关于热点KV的问题。请求不断访问到热点KV上,如果缓存的热点KV突然失效,大量请求就瞬间访问到数据库上。

如何解决缓存击穿?

1、设置热点数据永不过期;

2、请求缓存后再请求数据库前加锁,在第一次访问数据库后再次将缓存KV加载到redis中;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值