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

1)缓存穿透:

缓存穿透是指查询内存和数据库都不存在的数据,每次请求都会打到数据库上,从而压垮数据库。

解决方案:

  1. 缓存null:根据id=30000去数据可查找user,user=null,也将user=null放到redis中
  2. 使用布隆过滤器:是一种数据结构,判断值肯定不存在或者可能存在
    准备一个足够长的数组,将值存入数据库的时候,同时将key存入布隆过滤器
  3. 查找key的时候,先去布隆过滤器中获取这个key的三个hash值,在根据hash值去布隆过滤器中获取值,三个值中有一个0,代表数据肯定不存在,如果三个值都是1,代表可能存在,再去数据库查找数据,
    针对这个问题,加一层布隆过滤器。布隆过滤器的原理是在你存入数据的时候,会通过散列函数将它映射为一个位数组中的K个点,同时把他们置为1。
    这样当用户再次来查询A,而A在布隆过滤器值为0,直接返回,就不会产生击穿请求打到DB了。显然,使用布隆过滤器之后会有一个问题就是误判,因为它本身是一个数组,可能会有多个值落到同一个位置,那么理论上来说只要我们的数组长度够长,误判的概率就会越低,这种问题就可以在一定程度上得到解决。

缓存击穿:

redis中不存在这个key,数据库中存在,key在redis中过期了,当大量请 求过来的时候,请求会直接打到数据库上,引起数据库崩溃

解决方案:

  1. 加锁:操作数据库的时候加锁
  2. 当某一个请求去数据库查询的时候,同时在redis中将值设为null,待他 从数据库查到数据返回后,设置具体的值

缓存雪崩:

redis中不存在这些key,数据库中存在,这些key在某一时间集中过期了, 当大量请求过来的时候,请求会直接打到数据库上,引起数据库崩溃

解决方案:

  1. 加锁
  2. 多级缓存 设置key 的不同的过期时间,比如固定的过期时间上在随机1-10分钟
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值