Redis进阶 | 02.缓存穿透、击穿和雪崩总述

本文介绍了缓存中的三大问题——缓存穿透、击穿和雪崩,及其对数据库造成的影响。针对缓存穿透,提出了黑名单、存储空对象和布隆过滤器的解决方案;缓存击穿的对策包括实时监控、设置永不过期和分布式锁;缓存雪崩的预防措施则有实时监控、设置随机失效时间和分布式锁。这些策略旨在保障系统稳定性和数据库安全。
摘要由CSDN通过智能技术生成

参考视频

什么是Redis缓存雪崩、穿透、击穿,十分钟给你讲的明明白白

1.缓存穿透 - 不常规的key请求

1.1.什么是缓存穿透

恶意用户使用不常规的key发起大量请求,这些请求在缓存中无法命中,最终直接穿透缓存落入MySQL(如id= -1 )。

由于这个key不常规,缓存无法命中,最终都会穿透缓存进入到MySQL中,并进行全表查询。

当大量此类请求涌入MySQL服务器,便会使得MySQL节点宕机。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uIiEKEyK-1649700661204)(C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20220306180612183.png)]

1.2.缓存穿透的解决方案

  • 黑名单:封禁ip,无法防御换ip;

  • 存储空对象:查询失败的数据将存入Redis中。无法防御换key;

  • 布隆过滤器:数据结构为位图(bitmap),通过下标记录了Redis和MySQL中的所有key。用户查询之前,先通过过滤器判断是否有这个key,如果有则允许查询。

    image-20220411114100272

2.缓存击穿 - 一个key失效瞬间

2.1.什么是缓存击穿

缓存中某个key失效的瞬间,大量请求并发涌入,所有请求都打向了MySQL数据库,没等到Redis重建缓存便已宕机。

假设某商品的缓存过期时间为4h,当时间恰好到达4h,缓存失效,此时仍有大量请求涌入服务器中等待处理,

而这些请求在处理时,判断缓存中没有数据,便进入MySQL进行查询,并尝试重建缓存。但由于这些请求都是并发的,成千上万的请求同时涌入MySQL,导致MySQL宕机。

image-20220306181656374

2.2.缓存击穿的解决方案

  • 实时监控:即将到期时,重置过期时间;

  • 设置永不过期

  • 分布式锁:多线程并行访问时,第一个线程将抢到锁并重建缓存,其他线程没能抢到锁则进入休眠,待唤醒后从缓存中获取数据。

    分布式锁

3.缓存雪崩 - 多个key同时失效瞬间

3.1.什么是缓存雪崩

缓存中大量key同时失效的瞬间,大量请求并发涌入,所有请求都打向了MySQL数据库,没等到Redis重建缓存便已宕机。

就是缓存击穿的升级版,n个key同时失效,就是n个缓存击穿同时发生。

image-20220306182845459

3.2.缓存雪崩的解决方案

  • 实时监控:即将到期时,重置过期时间;
  • 设置永不过期
  • 随机失效时间:失效时间在固定范围内,但取范围内的随机值,有效避免大面积的Key同时失效。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值