Redis 缓存穿透、雪崩、击穿以及相关解决方案

缓存流程:

Redis 缓存穿透、雪崩、击穿以及相关解决方案

缓存穿透:

  1. 什么是缓存穿透:是指 redis 和数据库都没有这个数据,大量请求该数据造成数据库挂掉,该请求一般是非正常用户
    Redis 缓存穿透、雪崩、击穿以及相关解决方案
  2. 解决方案:
  3. 布隆过滤器:将数据库中所有的查询条件放入布隆过滤器中,当大量的请求过来的时候, redis 里面没有,再去布隆过滤器进行查,如果请求存在,则继续查;如果不存在,直接丢弃。
  4. 第一次请求打到数据库,无法是否能查询到数据还是空,都返回给 redis 做缓存,防止二次请求穿透 redis
  5. IP 拉黑
  6. 参数合法性校验,参数不合法,直接返回

缓存雪崩

  1. 什么是缓存雪崩:redis 缓存中 key 同一时间大量失效,大量的请求(不同key)全部打到数据库,就像雪崩来了一样
    Redis 缓存穿透、雪崩、击穿以及相关解决方案
  2. 解决方案:
  3. 设置缓存失效时间,不要在同一时间失效,在设置缓存的时候随机初始化有效时间,这样就不会让所有的缓存同时失效
  4. 不设置失效时间,让缓存永远不失效
  5. 跑定时任务,定时刷缓存,然后设置新的失效时间
  6. redis 集群,热点 key 部署到不同节点的 redis 上

缓存击穿

  1. 什么是缓存击穿:在高并发情况下,如果好多请求都在查询一个 Key ,这个 key 因为某些原因失效了,这样就会导致大量的请求直接打到数据库上了,造成数据库挂掉
    Redis 缓存穿透、雪崩、击穿以及相关解决方案
  2. 解决方案:
  3. 缓存永远不过期
  4. 分布式锁:第一个请求拿到了锁,到数据库获取数据,并缓存到 redis,其他请求被阻塞,睡眠几毫秒然后再次请求 redis ,这时的 redis 已经有缓存,直接返回
  5. 单体应用使用互斥锁

什么是布隆过滤器?

参考:
https://www.bilibili.com/video/BV1f5411b7ux
https://mp.weixin.qq.com/s/SlfLgsfbvytxNS46fTFUdA

直面挑战,躬身入局

Original: https://www.cnblogs.com/liyiran/p/13832500.html
Author: 熠然
Title: Redis 缓存穿透、雪崩、击穿以及相关解决方案

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/529048/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 4个实验,彻底搞懂TCP连接的断开

    前言 看到这个标题你可能会说,TCP 连接的建立与断开,这个我熟,不就是三次握手与四次挥手嘛。且慢,脑海中可以先尝试回答这几个问题: 四次挥手是谁发起的? 如果断电/断网了连接会断…

    Linux 2023年5月27日
    087
  • redis高级

    1 redis高可用 主从复制存在的问题: 1 主从复制,主节点发生故障,需要做故障转移,可以手动转移:让其中一个slave变成master—>哨兵 2 主从复制,只能主…

    Linux 2023年6月14日
    082
  • Linux上安装并启动tomcat

    1、下载tomcat安装包 官网链接:https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.57/bin/ 2、将tomcat上…

    Linux 2023年6月6日
    0107
  • 【Hash篇】哈希计算神器-HashMyFiles

    可直接拖放、复制粘贴、添加文件或文件夹的方式来批量计算Hash,操作简便、体积小、免费。这篇来介绍他的汉化和其它一些功能设置—【suy】 目录 1、绿色便携 2、批量算…

    Linux 2023年6月13日
    092
  • Redis 常用五种数据类型编码

    1.String 1.1 常用命令 (1)设置值 set key value [ex seconds] [px milliseconds] [nx|xx] set命令有几个选项: …

    Linux 2023年5月28日
    092
  • bash是什么?

    ​ –解释器,启动器 ​ –解释器: ​ 用户交互输入 如vim 文本文件输入 !/bin/bash *!/usr/bin/python bash/sh f…

    Linux 2023年5月27日
    074
  • 图解固件、驱动、软件的区别

    大家好,我是良许。 不管我们使用什么操作系统,无论是 Windows、macOS 还是 Linux ,里面都安装了许多软件、驱动程序和固件。但是,这三者概念有区别呢? 我在朋友圈做…

    Linux 2023年5月27日
    083
  • MySQL实现备份(1)

    完全备份和部分备份 冷备份、热备份、温备份 温备份适用于:myisam 热备份适用于:innodb 物理备份和逻辑备份 完全备份:备份所有数据 部分备份:只备份部分数据内容 两者第…

    Linux 2023年6月7日
    0133
  • 解决dpkg -i后自动安装依赖的问题

    自ubuntu14.04后,运行 若有未安装的依赖会先标记,再运行 自动将标记的依赖安装,再安装包即可 参考引用: https://qastack.cn/ubuntu/40011/…

    Linux 2023年6月13日
    089
  • IDEA maven项目导包报红线

    原因:没有导入maven包 最后有设置一次,以后就无需设置 1、问题 2、打开Setting 3、将下载好的maven包导入 配置一次,就不用每次都需要配置 1、如果在这个界面先关…

    Linux 2023年6月14日
    097
  • make

    make 背景 gcc 在编译一个包含多个源文件的工程时, gcc需要将每一个源文件都编译一遍,任何再链接起来形成一个可执行文件。实际上,用户很少对所有源文件都进行修改,这就会造成…

    Linux 2023年6月7日
    092
  • redis

    字符串:类似vector,有空闲的空间 capacity和len,当长度小于1M时,每次扩容加倍,大于1M,每次扩容1M,最大512M hash: 相当于c++ unordered…

    Linux 2023年5月28日
    083
  • MapReduce入门实例——WordCount

    摘要:MapReduce的IDEA配置及WordCount案例 Maven项目配置 创建一个空的Maven项目 打开根目录下的 pom.xml文件,参考配置: UTF-8 3.2….

    Linux 2023年6月8日
    090
  • 基于spring security创建基本项目框架

    SpringBoot建项目步骤 建表 新建项目 (package name可以自定义,整个项目只能在该包下) 选择可能有到的依赖 (别忘了勾选SQL中的Mybatis Framew…

    Linux 2023年6月7日
    074
  • NTP和chrony时间同步

    古代计时方式 ●在远古时期,人类用来确定时间的方式是一些自然界”相对”亘古不变的周期。如地球的公转是为一年,月球的公转是为一月,地球的自转是为一天等,最早的…

    Linux 2023年6月7日
    097
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球