Redis缓存击穿与缓存雪崩

缓存雪崩(大面积缓存失效,导致数据库请求量过大)

例子:比如对电商首页的热点产品信息,进行了缓存如果查不到则去数据中查找,再加入缓存。则如果12点集中缓存的1小时,到1点钟缓存同时失效,这个时候所有对这批商品的信息查询都会落到库上,对数据库来说抗不住这个大的并发,会导致数据库被打挂,开发又重启了数据库,但是缓存中还是没有数据,这批数据的请求还是落在数据库上,起来后又瞬间挂了

解决方案

对数据进行缓存时,对缓存时间添加一个随机数,这样可以避免缓存同时失效,少量更新缓存

缓存击穿(当个热点数据缓存失效,导致数据库请求量过大)

这个和缓存血本有点像,但又不太一样,这个是当个热点失效,导致大并发直接请求数据库,导致数据库挂了

解决方案

对热点数据永不过期,再数据更新时同时更新缓存

缓存穿透(访问不存在的数据,且没有对其缓存)

业务代码添加缓存一般是一下几个步骤

  1. 查询缓存是否有数据,有则返回
  2. 没有则查询数据库
  3. 数据库中查到则添加到缓存中
  4. 查到为null则不添加

一般数据库中的id都是大于0的 如果黑客一直使用-1 或者数据库中明显不存在的数据比如说Long的最大值 查询是查不到数据的 会一直请求数据库,数据量大会直接把数据库打挂

解决方案
  1. 对这些异常数据添加校验,不合法直接跑异常,不再走缓存也不走数据库
  2. 对null的数据进行缓存,但是时间30s左右,避免数据更新没有发觉
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值