当前位置: 首页 > news >正文

Redis-缓存穿透,缓存击穿,缓存雪崩

缓存穿透,缓存击穿,缓存雪崩

  • 缓存穿透
    • 处理方案
      • 解决方案1 缓存空数据
      • 解决方案2 布隆过滤器
  • 缓存击穿
    • 处理方案
      • 解决方案 1 互斥锁
      • 解决方案2 逻辑过期
  • 缓存雪崩
    • 处理方案
      • 解决方案 1 给不同的key的过期时间设置添加一个随机值,降低同一个时段大量key同时过期的概率
      • 解决方案 2 如果redis服务宕机,可以利用redis一些高可用的方案 比如哨兵模式,集群模式
      • 解决方案 3 给缓存业务添加降级限流策略 可以利用ngxin或者getway
      • 解决方案 4 给业务添加多级缓存 Guava或者caffeine为一级缓存,redis为二级缓存

缓存穿透

缓存穿透是指恶意或异常的查询请求导致缓存系统无法命中缓存,每次请求都要查询数据库或其他存储后端,导致数据库或存储系统压力过大的问题
可能造成的影响:数据库负载增加:频繁查询不存在的数据会导致数据库负载迅速增加,可能导致数据库崩溃或响应变得非常缓慢。

举一个例子:

一个get请求:api/news/getByid/2
通过这个id查询,我们后端会先去redis中查看是否有缓存,如果有的话直接从redis中返回就好了,如果没有则去查数据库,如果数据库中有的话,则缓存该数据并且返回
在这里插入图片描述
在我们实际上的请求中,有可能会出现查询不存在的id的情况,在这种情况下,我们redis查不到数据,导致大量的请求需要进行数据库查询操作,可能会造成数据库宕机。

处理方案

解决方案1 缓存空数据

缓存空数据,查询返回的数据为空,我们后端仍然把这个空结果进行缓存
优点:思路比较简单
缺点:比较消耗内存,可能发生不一致的问题

解决方案2 布隆过滤器

在这里插入图片描述
从上图中看,就好像一个净水器一样哈哈,作用其实有点类似

那么到底是怎么实现过滤的呢,其实底层是通过bitmap来实现的,而bitmap又是一个以bit为单位的数组,数组中每个位置只能存储二进制数0或1,例如我们传入一个数据id=1,那么布隆过滤器就会通过几个hash函数算出相应的值,如下图,传入id=1,通过hash1得到值为1,通过hash2得到值为3,通过hash3得到值为7,那么相应位置值都改为1,下次再传入数据id=1过来,我们只需要判断1,3,7这三个位置是否为1,即可判断该数据是否是空数据,当然布隆过滤器也是需要提前预热的。
在这里插入图片描述
缺点:实现比较复杂,存在误判
优点:内存占用比较少,没有多余的key
讲一下上面提到的误判:
在上图的前提下,如果此时又传入一个id=7,通过三个hash函数计算出来的值分别为,7,11,18。那么此时bitmap中有5个位置为1,分别为1,3,7,11,18,然而此时有一个空数据id=10,它通过hash函数计算出来的值分别为3,7,18,那么此时布隆过滤器会认为该数据不是空数据,产生一个误判的问题。

缓存击穿

缓存击穿是给某一个key设置了过期时间,当key过期的时候,恰好这时间点对这个key有大量的并发请求过来,这些并发的请求可能会瞬间把DB给压垮
在这里插入图片描述

举一个例子:

用白话来讲其实就是在设置redis的时候,我们设置了热点数据以及热点数据过期时间,但是等到热点数据的过期时间到了之后,该热点数据还是有多请求打过来,那么此时redis中不存在此热点数据的缓存了,就会将这些请求全部打在DB上,此时就会出现DB还来不及重建redis就被打死的情况

处理方案

解决方案 1 互斥锁

在这里插入图片描述
这个流程其实很好懂,当线程1进来查询缓存发现未命中后,加一把互斥锁,然后才查询数据库重建redis缓存,如果在重建还未完成的时候有别的线程进来想要查询数据就会被拦截了,一直要等到线程1将数据重新写入redis然后释放锁之后才能够拿到。
优点:强一致性
缺点:性能差

解决方案2 逻辑过期

逻辑过期,意味着永不过期。缓存击穿问题产生的原因是某个热点key过期了,请求都打到数据库了,造成数据库压力过大。因此我们可以提前准备一个不过期的热点key ,不设置它的过期时间,将这个key保存到redis中,这样理论上总能命中redis。那是怎么判断这个key逻辑上过期了?答案是这个key的value存储一个过期时间,我们判断这个key是否过期的依据,就是这个key的value保存的过期时间。
在这里插入图片描述
优点:高可用,性能高
缺点:不能保证数据的绝对一致,因为无论此数据是否过期,它都会直接就返回当前的数据

缓存雪崩

缓存雪崩是指在同一个时段大量缓存的key同时失效或者redis服务宕机了,导致大量的请求全部打到数据库

处理方案

解决方案 1 给不同的key的过期时间设置添加一个随机值,降低同一个时段大量key同时过期的概率

解决方案 2 如果redis服务宕机,可以利用redis一些高可用的方案 比如哨兵模式,集群模式

解决方案 3 给缓存业务添加降级限流策略 可以利用ngxin或者getway

解决方案 4 给业务添加多级缓存 Guava或者caffeine为一级缓存,redis为二级缓存

相关文章:

Redis-缓存穿透,缓存击穿,缓存雪崩

缓存穿透,缓存击穿,缓存雪崩 缓存穿透处理方案解决方案1 缓存空数据解决方案2 布隆过滤器 缓存击穿处理方案解决方案 1 互斥锁解决方案2 逻辑过期 缓存雪崩处理方案解决方案 1 给不同的key的过期时间设置添加一个随机值,降低同一个时段大量ke…...

如何使用Docker实现分布式Web自动化!

01、前言 顺着docker的发展,很多测试的同学也已经在测试工作上使用docker作为环境基础去进行一些自动化测试,这篇文章主要讲述在docker中使用浏览器进行自动化测试如果可以实现可视化,同时可以对浏览器进行相关的操作。 02、开篇 首先我们…...

从零开始:制作出色的产品原型图的详细教程

在设计产品的初始版本或模型时,产品原型起着非常重要的作用,可以帮助设计师和团队更好地了解产品需求和用户需求,优化和改进设计,确保设计最终满足用户的需求和期望。如果你不知道如何绘制产品原型图,绘制产品原型图的…...

美国访问学者签证如何申请加急办理?

许多中国学者梦想着前往美国深造,积累更多的学术经验和知识。然而,签证申请过程可能会变得复杂和繁琐,特别是如果你需要在紧急情况下前往美国。但别担心,本文知识人网小编将为您介绍美国访问学者签证加急办理的一些建议和步骤。 首…...

33 WEB漏洞-逻辑越权之水平垂直越权全解

目录 前言水平,垂直越权,未授权访问Pikachu-本地水平垂直越权演示(漏洞成因)墨者水平-身份认证失效漏洞实战(漏洞成因)原理越权检测-Burpsuite插件Authz安装测试(插件使用)修复防御方案 前言 越权漏洞文章分享:https://www.cnblogs.com/zhen…...

【FreeRTOS】【STM32】02 FreeRTOS 移植

基于 [野火]《FreeRTOS%20内核实现与应用开发实战—基于STM32》 正点原子《STM32F429FreeRTOS开发手册_V1.2》 准备 基础工程,例如点灯 FreeRTOS 系统源码 FreeRTOS 移植 上一章节已经说明了Free RTOS的源码文件在移植时所需要的,FreeRTOS 为我们提供…...

STM32F4X 内部FLASH使用

STM32F4X 内部FLASH使用 STM32F4X 内部FLASHSTM32F4X内部FLASH结构STM32F40X和STM32F41X内部FLASH结构STM32F42X和STM32F43X内部FLASH结构 STM32F4X内部FLASH操作例程internal_flash.hinternal_flash.cmain.c 在嵌入式开发中,经常需要实时保存一些数据。如果工程的代…...

减小windows或linux虚拟机导出ova体积大小

减小windows或linux虚拟机导出ova体积大小 删除无用的文件,比如日志或者命令,程序等;去除磁盘碎片将不用的内存空间填充为0,便于vmdk压缩。 例子: 日志文件置空: 批量置空 /sf/data/log/ 目录下的日志文…...

WPF livecharts 折线图遮挡数字问题

在WPF里使用livecharts,如果折线图或者柱状图有多个的时候,可能会出现两个数字遮挡问题,这时候要设置DataLabelsTemplate 属性。 如LineSeries设置代码如下: 第一个折线图的DataLabelsTemplate var stackPanelFactory new Fra…...

电力系统数字化升级改造之配电室无人值守

随着科技的不断进步,电力系统的数字化升级改造已成为必然趋势。其中,配电室的无人值守是其中重要的一环。 配电室是电力系统的重要组成部分,其运行状态直接影响到电力系统的稳定性和可靠性。然而,传统的配电室存在很多问题&am…...

集合Set

目录 一、去重问题 一、去重问题 题目描述&#xff1a; 小明想在学校中请一些同学一起做一项问卷调查&#xff0c;为了实验的客观性他先用计算机生成了N个1&#xff5e;1000之间的随机整数(N<1000),N是用户输入的&#xff0c;对于其中重复的数字&#xff0c;只保留一个&am…...

TCP/IP(二)导论

一 知识铺垫 以下内容参照 <<电子科技大学TCPIP协议原理>>全 ① 协议和标准 一组规则&#xff1a; 交通规则、学生上学的学生守则等;数据通信的规则,有一个专门的名称叫作协议 protocol语义&#xff1a;具体描述在通信当中,每一个信息的具体含义. 二进制bit流…...

Java之UDP,TCP的详细解析

练习四&#xff1a;文件名重复 public class UUIDTest { public static void main(String[] args) { String str UUID.randomUUID().toString().replace("-", ""); System.out.println(str);//9f15b8c356c54f55bfcb0ee3023fce8a } } public class Client…...

【总结】kubernates crd client-java 关于自定义资源的增删改查

Java model 准备 首先使用 crd.yml 和 kubernetes CRD 自动生成 Java model 类&#xff0c;这是一切的前提&#xff0c;之前在这个地方也卡了很久。如何生成在另外一个文章中已经有所记录。 使用 crd.yml 和 kubernetes CRD 自动生成 Java model 类 CustomObjectsApi 文档学习…...

蓝牙主要知识,一文概览

蓝牙知识相关 文章目录 蓝牙知识相关1.蓝牙版本的发展简史2.低功耗BLE PHY2.1 频段**2.2 BLE调制方案—GFSK**2.3 **蓝牙 LE 传输速度、功率和接收器灵敏度**2.4 **BLE 时分双工 (TDD)**3.BT主从连接过程3.1 主设备工作模式3.1.1 积木编程控制台3.2 从设备工作模式3.2.1 蓝牙遥…...

Linux 守护进程

一 何为守护进程 守护进程&#xff08; Daemon &#xff09;也称为精灵进程&#xff0c;是运行在后台的一种特殊进程&#xff0c;它独立于控制终端并且周期性 地执行某种任务或等待处理某些事情的发生&#xff0c;主要表现为以下两个特点&#xff1a; 长期运行。守护进程是一…...

自动驾驶技术的基础知识

自动驾驶技术是现代汽车工业中的一项革命性发展&#xff0c;它正在改变着我们对交通和出行的理解。本文将介绍自动驾驶技术的基础知识&#xff0c;包括其概念、历史发展、分类以及关键技术要素。 1. 自动驾驶概念 自动驾驶是一种先进的交通技术&#xff0c;它允许汽车在没有人…...

解决:yarn 无法加载文件 “C:\Users\XXXXX\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本“ 的问题

1、问题描述&#xff1a; 报错的整体代码为&#xff1a; yarn : 无法加载文件 C:\Users\admin\AppData\Roaming\npm\yarn.ps1&#xff0c;因为在此系统上禁止运行脚本 // 整体的报错代码为 &#xff1a; yarn : 无法加载文件 C:\Users\admin\AppData\Roaming\npm\yarn.ps1&…...

【JVM--StringTable字符串常量池】

文章目录 1. String 的基本特性2. 字符串拼接操作3. intern()的使用4. StringTable 的垃圾回收 1. String 的基本特性 String 声明为 final 的&#xff0c;不可被继承String 实现了 Serializable 接口&#xff1a;表示字符串是支持序列化的。String 实现了 Comparable 接口&am…...

Large Language Models Meet Knowledge Graphs to Answer Factoid Questions

本文是LLM系列文章&#xff0c;针对《Large Language Models Meet Knowledge Graphs to Answer Factoid Questions》的翻译。 大型语言模型与知识图谱相遇&#xff0c;回答虚假问题 摘要1 引言2 相关工作3 提出的方法4 实验设计5 结果与讨论6 结论 摘要 最近&#xff0c;有研…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...

es6+和css3新增的特性有哪些

一&#xff1a;ECMAScript 新特性&#xff08;ES6&#xff09; ES6 (2015) - 革命性更新 1&#xff0c;记住的方法&#xff0c;从一个方法里面用到了哪些技术 1&#xff0c;let /const块级作用域声明2&#xff0c;**默认参数**&#xff1a;函数参数可以设置默认值。3&#x…...

图解JavaScript原型:原型链及其分析 | JavaScript图解

​​ 忽略该图的细节&#xff08;如内存地址值没有用二进制&#xff09; 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么&#xff1a;保存在堆中一块区域&#xff0c;同时在栈中有一块区域保存其在堆中的地址&#xff08;也就是我们通常说的该变量指向谁&…...

深度解析:etcd 在 Milvus 向量数据库中的关键作用

目录 &#x1f680; 深度解析&#xff1a;etcd 在 Milvus 向量数据库中的关键作用 &#x1f4a1; 什么是 etcd&#xff1f; &#x1f9e0; Milvus 架构简介 &#x1f4e6; etcd 在 Milvus 中的核心作用 &#x1f527; 实际工作流程示意 ⚠️ 如果 etcd 出现问题会怎样&am…...

简单聊下阿里云DNS劫持事件

阿里云域名被DNS劫持事件 事件总结 根据ICANN规则&#xff0c;域名注册商&#xff08;Verisign&#xff09;认定aliyuncs.com域名下的部分网站被用于非法活动&#xff08;如传播恶意软件&#xff09;&#xff1b;顶级域名DNS服务器将aliyuncs.com域名的DNS记录统一解析到shado…...

多模态大语言模型arxiv论文略读(110)

CoVLA: Comprehensive Vision-Language-Action Dataset for Autonomous Driving ➡️ 论文标题&#xff1a;CoVLA: Comprehensive Vision-Language-Action Dataset for Autonomous Driving ➡️ 论文作者&#xff1a;Hidehisa Arai, Keita Miwa, Kento Sasaki, Yu Yamaguchi, …...

c++算法学习3——深度优先搜索

一、深度优先搜索的核心概念 DFS算法是一种通过递归或栈实现的"一条路走到底"的搜索策略&#xff0c;其核心思想是&#xff1a; 深度优先&#xff1a;从起点出发&#xff0c;选择一个方向探索到底&#xff0c;直到无路可走 回溯机制&#xff1a;遇到死路时返回最近…...