redis缓存雪崩、穿透、击穿

2023-11-19

      这篇文章我们来了解一下一些redis的高并发问题以及他的解决方法。

       上图是一个简单的数据查询流程, 前台请求,后台先从缓存中取数据,取到直接返回结果,取不到时从数据库中取,数据库取到更新缓存,并返回结果,数据库也没取到,那直接返回空结果。

一、redis缓存雪崩

1、什么是redis缓存雪崩

        在某个时间点,大量的缓存键同时过期或失效,导致大量的请求直接访问数据库上,造成数据库负载突然增大,甚至引起数据库性能下载或崩溃的现象。

2、解决方案

(1)设置缓存失效时间随机,使其不在同一时间失效。

(2)分布式缓存和多级缓存,将缓存分散到多个结点减少单点故障的影响。

(3)预加载热点数据。

(4)如果雪崩以发生,设置本地缓存并进行限流,避免数据库崩溃。

二、redis缓存穿透

1、什么是redis缓存穿透?

  • 大量无效请求穿过缓存直接访问数据库,导致数据库压力过大,宕机。
  • 数据库的id都是从1开始的(正数),当有黑客想攻击我的数据库时,每次每次发送的请求ID都是负数。会导致直接穿透redis到数据库进行访问。

2、解决方案

(1)布隆过滤器

        布隆过滤器是一种高效的数据结构,用于判断某个元素是否存在于集合中。在请求到来时,可以先通过布隆过滤器判断请求的键是否合法,如果键不存在于布隆过滤器中,就可以直接拒绝该请求,避免对数据库的查询操作。

(2)从缓存中找不到的数据,在数据库中也没有,将取得的null值也放入数据库。

三、redis缓存击穿

1、什么是缓存击穿?

       一个非常热门,但是却在缓存中不存在的数据被大量请求访问时,直接访问数据库,给数据库增加压力。

2、解决方案

(1)设置热点key不过期

         对于一些非常热点的数据,可以将其缓存的过期时间设置为永不过期,或者设置一个较长的过期时间,保证热点数据在缓存中一直存在,避免频繁的缓存失效。

(2)加互斥锁

        当缓存失效时,可以使用互斥锁来保护对数据库的访问,只允许一个线程去查询数据库,其他线程等待结果。这样可以避免并发访问数据库,减轻数据库的压力。

(3)分布式锁和限流

        使用分布式锁和限流机制来控制对数据库的并发访问。通过限制每秒钟能够请求数据库的请求数量,避免大量请求同时涌入,保护数据库的稳定性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

redis缓存雪崩、穿透、击穿 的相关文章

随机推荐

  • 2-4、React+antd页面UI美化——登录界面设计

    React Antd 实现组件的UI美化示例 目标UI 创建一个页面page 用于用户登录 要求页面简洁 美观 易懂 要求有背景 要求引入antd登录表单组件 要求有登录样式 基于antd的表单对页面完成简单的渲染 图示 UI拆解 背景渲染
  • linux spring mvc tomcat配置,Spring MVC配置详解

    一 Spring MVC处理流程 1 Spring MVC将所有请求都交由DispatchServlet进行处理 2 DispatchServlet获取HandlerMapping 处理映射器 然后找到对应的HandlerBean处理Con
  • python列表增加元素的三种方法

    本文主要介绍了关于python列表增加元素的几种操作方法 主要有insert方法 extend方法和append方法 每种方法给大家介绍的非常详细 希望对你有所帮助 1 insert方法 该方法包含两个参数 第一个参数为插入的位置参数 第二
  • 解决Eclipse没有serve及无tomcat9.0

    网上一般提供的 Kepler repository http download eclipse org releases kepler 版本老 在Eclipse help install new 直接输入版本时间 出现如下 我的版本是201
  • 区块链java的demo_区块链-java入门Demo-Go语言中文社区

    正在创建第一个区块链 创建区块 00000d3c0681cd67f8050ab996e1400f99c0060ba4cb22d0c07685d9ae50cd10 正在创建第二个区块链 创建区块 00000eafdd53bed5586d480
  • 使用h5标签需要兼容,不使用没有标签进行语义化,如何取舍?兼容IE6,7,8,canvas,video

    HTML5已向开发人员提供了很多新的标签 如section nav article header和footer等 这些标签语义化程度高 会被经常使用 但在IE6 IE7 IE8和Firefox 2等老式浏览器中却不能识别和正常使用 很多浏览
  • 记录问题: HTTPSConnectionPool(host=‘files.pythonhosted.org‘, port=443): Read timed out.

    python报错 HTTPSConnectionPool host files pythonhosted org port 443 Read timed out 这个问题目前遇到都是因为网速引起的 解决办法是 使用命令 pip instal
  • 国际快递查询代码,网站的online track

    今天高兴了一把 只花了一小片的功夫 解决了一个大问题 哈哈 使用以下代码 就可以使用17track网站来查询国际单号 跟踪快递 航空包裹 不同的是 我可以随意更改自己想要的 比如按钮值 页面样式 增加一些效果等 以下是 文本域可以清空的效果
  • python一维数组变三维数组_python numpy 一维数组转变为多维数组的实例

    python numpy 一维数组转变为多维数组的实例 如下所示 import numpy new list i for i in range 9 numpy array new list reshape 3 3 借助numpy库 以上这篇
  • 服务器上安装anaconda

    1 下载anaconda 这里有两种方法 第一种在官网上下载对应版本的安装包 地址 https www anaconda com products individual 再将安装包上传到服务器 之后输入命令 完成安装 第二种方法 在控制台上
  • Generative AI 新世界

    在上一篇 Generative AI 新世界 大型语言模型 LLMs 概述 中 我们一起探讨了大型语言模型的发展历史 语料来源 数据预处理流程策略 训练使用的网络架构 最新研究方向分析 Amazon Titan LLaMA PaLM E 等
  • android的webView的教程,Android WebView 应用界面开发教程

    WebView组件本身就是一个浏览器实现 Android5 0增强的WebView基于Chromium M37 直接支持WebRTC WebAudio WebGL 开发者可以直接在WebView中使用聚合 Polymer 和Material
  • Python 查找文件夹下某一类型的文件

    查找文件夹下面的某一类型的文件 并输出列表 import os 例如txt格式 def get files list directory file type txt file list for f root f dirs f files i
  • Springboot使用slf4j记录日志

    前言 在项目开发中 记录日志是必做的一件事情 而当我们使用Springboot框架时 记录日志就变得极其简单了 springboot内置了slf4j日志框架 我们只需要添加依赖 做一些简单的配置就ok了 下面 我们就来看看在Springbo
  • python圆的代码:如何使用Python绘制一个圆形

    Python圆的代码可以使用matplotlib库中的Circle函数来实现 Circle函数接受两个参数 一个是圆心的坐标 x y 另一个是圆的半径r 下面是一个简单的Python代码示例 Python圆的代码可以使用matplotlib
  • Matlab连接字符串的方法

    Matlab连接字符串的方法 2011 04 20 13 22 42 转载 标签 杂谈 分类 matlab 在Matlab中 想要将两个字符串连接在一起 有以下的方法 假定有两个字符串 gt gt str1 Iloveyou str2 12
  • 【SQL注入-15】自动化注入案例—以sqli-labs-less9为例(利用sqlmap工具)

    目录 1 前言 2 自动化注入案例 以sqli labs less9为例 2 1 实验平台 2 2 注入前准备 2 3 判断注入点及注入类型 2 3 1 自动判断注入点及注入类型 2 3 2 手动判断注入点及注入点类型 2 4 爆库名 2
  • 云函数部署之网易云

    云函数部署之网易云 云函数 什么是云函数 就是可以让你没有服务器 本地电脑不用下载Python也可以使用这个项目 而且还是白嫖 既解决了很多人部署的麻烦 也给了那些被劝退的朋友回来的勇气 十分钟便可以全部弄完 1 进入云函数 这里拿腾讯云的
  • caffe im2col 详解

    caffe im2col详解 本文讲解的是caffe中卷积过程 众所周知caffe中卷积采用的是im2col和sgemm的方式 网上已经有很多的im2col的讲解 原本不打算写这篇文章 在此不得不吐槽下 网上有不少的讲解caffe im2c
  • redis缓存雪崩、穿透、击穿

    这篇文章我们来了解一下一些redis的高并发问题以及他的解决方法 上图是一个简单的数据查询流程 前台请求 后台先从缓存中取数据 取到直接返回结果 取不到时从数据库中取 数据库取到更新缓存 并返回结果 数据库也没取到 那直接返回空结果 一 r