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)

大家都在看

  • 分布式系统架构理论与组件

    1.分布式系统的发展 在计算机发展的早期,一直都是集中式计算,计算能力依赖大型计算机。随着互联网的发展,繁重的业务需要巨大的计算能力才能完成,而集中式计算无法满足要求,大型计算机的…

    Linux 2023年6月6日
    0109
  • DNS 查询原理详解

    你可能会问,难道 DNS 服务器(比如 1.1.1.1)保存了世界上所有域名(包括二级域名、三级域名)的 IP 地址? 当然不是。DNS 是一个分布式系统,1.1.1.1 只是用户…

    Linux 2023年6月8日
    065
  • CANoe的安装和使用

    CANoe的简介 CANoe是德国Vector公司为汽车总线的开发而设计的一款总线开发环境,全称叫CAN open environment。CANoe集合了网络监控、数据获取/记录…

    Linux 2023年6月13日
    0212
  • 如何在EMACS 设置格式

    如何设置Emacs的各种模式, 这个教程要观摩一下的 http://www.emacswiki.org/emacs/IndentingC#toc1 Original: https:…

    Linux 2023年6月14日
    0109
  • 白话TCP/IP原理

    TCP/IP(Transmission-Control-Protocol/Internet-Protocol),中文译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Inte…

    Linux 2023年5月27日
    0102
  • 配置git环境与项目创建

    主要用于记录上课笔记,方便以后复习 acgit的地址:https://git.acwing.com/wyw/kob1/ 1. 项目模块的包含 1.1 采用前后端分离 Web端大概框…

    Linux 2023年6月6日
    0118
  • 【原创】Linux中断子系统(四)-Workqueue

    背景 Read the fucking source code! –By 鲁迅 A picture is worth a thousand words. –…

    Linux 2023年6月8日
    0103
  • Docker私有仓库搭建

    Docker私有仓库搭建 1、Docker Registry 网上有很多的 Registry服务器都支持第三方用户注册,而后基于用户名去做自己的仓库,但是使用互联网上的 Regis…

    Linux 2023年6月7日
    0154
  • Linux 压缩、解压缩命令

    Linux 压缩、解压缩命令 tar 语法命令 tar [options…] [files] options:选择描述-A 追加tar文件至归档-c 创建一个新文档-d…

    Linux 2023年6月6日
    0103
  • Tomcat 介绍及使用教程

    镜像下载、域名解析、时间同步请点击阿里云开源镜像站 1. Tomcat 介绍 Apache Tomcat 是由 Apache Software Foundation(ASF)开发的…

    Linux 2023年5月27日
    079
  • 性能瓶颈分析与调优

    对于性能测试,很多时候压力并不能完全到达服务端,在客户端、网络连接端都有可能被阻塞,或者压测的某些特征符合CC和DDoS的行为,触发了防护策略导致压测结果达不到预期。 以下是各节点…

    Linux 2023年6月8日
    0105
  • 图解固件、驱动、软件的区别

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

    Linux 2023年6月14日
    0103
  • 如何在MySQL中进行简单的增删改查

    — 创建dept表并设置主键create table dept(deptno int(2) primary key ,dname varchar(14),loc var…

    Linux 2023年6月7日
    0101
  • Linux(进阶篇)

    一、进程 1 进程和内存管理 1.1 进程和线程的区别 线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位 一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路…

    Linux 2023年6月7日
    093
  • Docker 容器中安装 Docker

    本文讲的是在Docker中安装Ubuntu容器,然后在这个Ubuntu容器中再安装Docker。或许这样可以省下买服务器的钱,当然这只是为了学习测试使用,真正项目上还是需要买服务器…

    Linux 2023年6月14日
    0102
  • PyTorch介绍-优化模型参数

    既然已经有模型和数据了,是时候在数据上优化模型参数来训练、验证和测试它了。模型训练是一个迭代过程;在每一次迭代( epoch),模型会作出一个预测,计算其预测误差( loss),收…

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