redis 缓存击穿问题与解决方案
- 前言
- 1. 什么是缓存击穿?
- 2. 如何解决缓存击穿?
- 怎么做?
- 方案1: 定时刷新
- 方案2: 自动续期
- 方案3: 定时续期
- 如何选?
前言
- 当我们使用redis做缓存的时候,查询流程一般是先查询redis,如果redis未命中,再查询MySQL,将MySQL查询的数据同步到redis(回源),最后返回数据
流程图
为什么使用 redis 作为缓存: 减少 DB 层 重复数据查询 的压力
- redis 有 10 万QPS
- DB 只有几万(MySQL 1 万 QPS)
1. 什么是缓存击穿?
热 key 失效,当一个访问量特别高的一行数据在 redis 中失效,所有的请求全部打到 DB 层,可能直接将 DB 打爆
2. 如何解决缓存击穿?
两个方向:
- 热 key 不失效
- 当热 key 失效(状态),同时只放一个请求去回源更新redis,其他请求(等待回源完成再取 redis 的数据或者返回空)
怎么做?
方案1: 定时刷新
- 每行数据除了数据本身以外储存一个更新标记,并且更新标记的过期时间小于数据的过期时间
case: 数据过期时间 10 分钟,数据的更新标记的过期时间 10 秒 - 每次查询数据先检查更新标记是否存在(使用 redis 的 SET NX PX 命令),写失败意味着不需要更新,写成功意味着需要更新.
- 判断第二步的执行结果:
- 成功(回源查询 DB 数据并更新到 redis,同时重置过期时间);
- 失败(直接取 redis 的数据,如果取 redis 的数据也失败,则返回空(只放一个请求回源更新,其他等待回源完成再取 redis 的数据或者返回空))
总结: 热数据(不断访问)会根据更新标记自动的刷新数据,而不会过期(热数据永不过期)
方案2: 自动续期
使用 lua 脚本
- 先查询数据
- 如果命中,重置数据的过期时间,并返回数据
- 如果未命中: 设置一个空值(当 redis 没有数据,只允许一个请求回源),并回源 DB 层查询并更新到redis
总结: 使用 lua 脚本在命中redis 数据的时候就自动对数据的过期时间进行续期,实现热key 的过期
但是此方案不会自动更新数据,需要有其他的更新数据的逻辑(可参考redis 与 DB 的数据一致性
)支持
方案3: 定时续期
- 对每行数据单独储存一个续期标记
- 每次查询数据是先检查更新标记(SET NX PX)
- 如果成功
- 如果数据存在redis,重置过期时间;
- 不存在设置一个空值并回源 DB 层查询更新(只放行一个请求回源更新)
- 如果失败(直接获取数据)
- 如果成功
总结: 使用续期标记实现热数据的定时续期,实现热 key 的不过期
但是此方案不会自动更新数据,需要有其他的更新数据的逻辑(可参考redis 与 DB 的数据一致性
)支持
如何选?
-
方案 1: 定时刷新
a. 天然包含数据一致性(每 更新标记的过期时间(10s) 会自动刷新数据)
b. 足够的简单可靠
c. 如果项目对一致性要求不高的情况下可以选用 -
方案 2: 自动续期
a. 单个的逻辑很简单,并且是独立(与一致性)运行的,可自由搭配一致性策略
b. 如果项目对数据一致性有特殊要求,或者已经实现了一致性策略,可以选用 -
方案 3: 定时续期
a. 单个的逻辑较为复杂(对比方案 2), 并且是独立(与一致性)运行的,可自由搭配一致性策略
b. 如果项目对数据一致性有特殊要求,或者已经实现了一致性策略,可以选用方案 2
相关文章:
redis 缓存击穿问题与解决方案
前言1. 什么是缓存击穿?2. 如何解决缓存击穿?怎么做?方案1: 定时刷新方案2: 自动续期方案3: 定时续期 如何选? 前言 当我们使用redis做缓存的时候,查询流程一般是先查询redis,如果redis未命中,再查询MySQL,将MySQL查询的数据同步到redis(回源),最后返回数据 流程图 为什…...
Linux下的进程切换与调度
目录 1.进程的优先级 优先级是什么 Linux下优先级的具体做法 优先级的调整为什么要受限 2.Linux下的进程切换 3.Linux下进程的调度 1.进程的优先级 我们在使用计算机的时候,通常会启动多个程序,这些程序最后都会变成进程,但是我们的硬…...
开源模型应用落地-Qwen1.5-MoE-A2.7B-Chat与vllm实现推理加速的正确姿势(一)
一、前言 在人工智能技术蓬勃发展的当下,大语言模型的性能与应用不断突破边界,为我们带来前所未有的体验。Qwen1.5-MoE-A2.7B-Chat 作为一款备受瞩目的大语言模型,以其独特的架构和强大的能力,在自然语言处理领域崭露头角。而 vllm 作为高效的推理库,为模型的部署与推理提…...
阿里云IOT设备管理
本文主要介绍了阿里云IOT设备管理的基本概念、功能特点以及应用场景。阐述了如何利用阿里云IOT平台实现设备的连接、监控和控制,以及如何借助其丰富的数据分析功能提升设备管理效率。 一、IOT工作原理 二、创建模拟设备 1.创建产品 2.物模型 3.设备 4.设备数据上报…...
图像处理技术和应用
图像处理技术是一种依托计算机和相关算法,对图像进行深度处理、分析及改变的技术。主要包括图像数字化、图像增强和复原、图像数据编码、图像分割和图像识别等。它不仅能够从静态图像中提取关键信息,还能改变图像的外观或特征,并进一步检测、…...
格式化字符串漏洞详解
一、漏洞原理 格式化字符串漏洞(Format String Vulnerability)是由于程序使用用户可控的输入作为格式化字符串参数(如 printf、sprintf 等函数)时未正确过滤导致的漏洞。攻击者可通过构造特殊格式字符串实现以下操作:…...
java项目之基于web的中国古诗词的设计与实现源码(ssm+mysql)
风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的基于web的中国古诗词的设计与实现。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 基于web的中国…...
网络初识-
网络的相关概念 一、局域网和广域网 将各种计算机、外部设备等相互连接起来,实现在这个范围内数据通信和资源共享的计算机网络。它的覆盖范围通常在几百米到几公里之内。例如,一个小型企业的办公室,通过交换机将多台电脑连接在一起…...
AOS安装及操作演示
文章目录 一、安装node1.1 在 macOS 上管理 Node版本1.1.1 安装 nvm1.1.2 验证 nvm 是否安装成功1.1.3 使用 nvm 安装/切换 Node.js 版本1.1.4 卸载 Node.js 版本 1.2 在 windows 上管理 Node版本1.2.1 安装 nvm-windows1.2.2 安装 Node.js 版本1.2.3 切换 Node.js 版本1.2.4 卸…...
vue学习8
1.pinia(更优) 是vue最新的状态管理工具,是vuex的替代品 pinia: state actions(支持异步,可以直接修改state) getters 优点: 提供更加简单的API(去掉了mutation)提供符合,组合式的API语法(和v…...
【竞技宝】电竞世界杯:无畏契约首次入选正式项目!
北京时间2月12日,电竞世界杯基金会(EWCF)与知名游戏开发商拳头游戏(Riot Games)在近日共同宣布达成三年合作伙伴关系。同时,三大顶级电竞项目——《英雄联盟》《英雄联盟:云顶之弈》(…...
Bigemap Pro地图配置文件包
配置文件获取 配置文件下载后,直接拖入软件中自动识别导入图源,一键完成加载。...
有哪些免费的SEO软件优化工具
随着2025年互联网的不断发展,越来越多的企业意识到在数字营销中,网站的曝光度和排名至关重要。无论是想要提高品牌知名度,还是想要通过在线销售增加收益,SEO(搜索引擎优化)都是一项不可忽视的关键策略。而要…...
第二天:工具的使用
每天上午9点左右更新一到两篇文章到专栏《Python爬虫训练营》中,对于爬虫有兴趣的伙伴可以订阅专栏一起学习,完全免费。 键盘为桨,代码作帆。这趟为期30天左右的Python爬虫特训即将启航,每日解锁新海域:从Requests库的…...
分享在职同时准备系统分析师和教资考试的时间安排
(在职、时间有限、同时备考系统分析师考试和小学信息技术教资面试),以下是详细的备考计划,确保计划的可行性和通过性。 一、总体安排 时间分配: 每周周末(2天)用于系统分析师考试备考。工作日晚…...
从Word里面用VBA调用NVIDIA的免费DeepSeekR1
看上去能用而已。 选中的文字作为输入,运行对应的宏即可;会先MSGBOX提示一下,然后相关内容追加到word文档中。 需要自己注册生成好用的apikey Option ExplicitSub DeepSeek()Dim selectedText As StringDim apiKey As StringDim response A…...
3.2 > Bash
概览 在上一节中我们了解了关于 Shell 的执行流程,知道了在 Linux 环境中一般有哪些常用的 Shell。而在本节中,将会学习到 Linux 中最常见的一个 Shell —— Bash,了解到 bash 的相关知识和用法。 本节目录 概览相关知识bash 命令提示符bas…...
游戏引擎学习第100天
仓库:https://gitee.com/mrxiao_com/2d_game_2 昨天的回顾 今天的工作重点是继续进行反射计算的实现。昨天,我们开始了反射和环境贴图的工作,成功地根据法线显示了反射效果。然而,我们还没有实现反射向量的计算,导致反射交点的代…...
新一代SCADA: 宏集Panorama Suite 2025 正式发布,提供更灵活、符合人体工学且安全的应用体验
宏集科技宣布正式推出全新Panorama Suite 2025 SCADA软件!全新版本标志着 Panorama Suite的一个重要里程碑,代表了从 Panorama Suite 2022 开始并跨越三个版本(2022、2023、2025)的开发过程的顶峰。 此次重大发布集中在六个核心主…...
Visual Studio 进行单元测试【入门】
摘要:在软件开发中,单元测试是一种重要的实践,通过验证代码的正确性,帮助开发者提高代码质量。本文将介绍如何在VisualStudio中进行单元测试,包括创建测试项目、编写测试代码、运行测试以及查看结果。 1. 什么是单元测…...
Notepad++ 中删除所有以 “pdf“ 结尾的行
Notepad 中删除所有以 “pdf” 结尾的行 操作步骤 1.打开文件: 在 Notepad 中打开你需要处理的文本文件。 2.打开查找和替换对话框: 按快捷键 Ctrl F,打开“查找和替换”对话框。 3.启用正则表达式模式: 在对话框的底部…...
Java 使用腾讯翻译 API 实现含 HTML 标签文本,json值,精准翻译工具
注意:需搭配标题二的腾讯翻译工具使用 一-1、翻译标签文本工具 package org.springblade.common.utils;import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern;public class TencentTranslationFor…...
DeepSeek R1+Open WebUI +SearXNG 本地化部署与联网功能
GitHub - searxng/searxng-docker: The docker-compose files for setting up a SearXNG instance with docker....
数据科学之数据管理|NumPy数据管
一、Numpy介绍 (一) 什么是numpy NumPy是Python中科学计算的基础包。它是一个Python库,提供多维数组对象,各种派生对象(如掩码数组和矩阵),以及用于数组快速操作的各种API,有包括数学、逻辑、形状操作、排序、选择、输入输出、离散傅立叶变换、基本线性代数,基本统计运…...
零基础玩转 DeepSeek API实战教程
大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于大模型算法的研究与应用。曾担任百度千帆大模型比赛、BPAA算法大赛评委,编写微软OpenAI考试认证指导手册。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。授权多项发明专利。对机器学…...
【GPIO】5.理解保护二极管在GPIO过电压保护中的作用
在电子电路设计中,保护二极管是常见的保护元件,用于防止过电压对敏感电路的损害。本文将探讨当GPIO输入电压大于3.3V时,保护二极管如何工作,并解释为什么大部分过电压引起的电流会通过二极管流向VDD而不是流入内部电路。 1.背景 …...
2.5 模块化迁移策略:从传统项目到模块化系统
模块化迁移策略:从传统项目到模块化系统 将传统 Java 项目迁移至 JDK 9 模块化系统是一项系统性工程,需分阶段实施以降低风险。以下是详细的迁移策略、工具使用和实战示例。 1. 迁移阶段划分 阶段目标关键操作阶段1:兼容性验证确保项目能在…...
Tortoise Git
TortoiseGit 是一个 Windows Shell 与 Git 的接口,它提供了文件状态的覆盖图标,强大的 Git 上下文菜单等。你可以在官方网站 (tortoisegit.org) 轻松使用安装程序进行下载。TortoiseGit 的当前稳定版本是 2.14.0 ,根据你的机器配置࿰…...
Maven Spring框架依赖包
Maven中添加Spring框架依赖包 Spring核心工具包SpringJDBCSpring配置文件头信息 Spring核心工具包 在pom.xml文件中添加 <!-- Spring的核心工具包--><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spr…...
【Cocos TypeScript 零基础 15.1】
目录 见缝插针UI脚本针脚本球脚本心得_旋转心得_更改父节点心得_缓动动画成品展示图 见缝插针 本人只是看了老师的大纲,中途不明白不会的时候再去看的视频 所以代码可能与老师代码有出入 SIKI_学院_点击跳转 UI脚本 import { _decorator, Camera, color, Component, directo…...
Linux库制作与原理:【静态库】【动态库】【目标文件】【ELF文件】【ELF从形成到假造轮廓】【理解链接和加载】
目录 一.什么是库 二.静态库 2.1创建静态库 我们在之前的路径下新建lib使用我们自己的库 2.2 使用makefile生成静态库 三.动态库 3.1动态库生成 3.2动态库使用 3.3库运行搜索路径 四.目标文件 五.ELF文件 六.ELF从形成到加载轮廓 6.1ELF形成可执行 6.2 ELF可执行文…...
中间件-redis-(ubantu)
1、安装依赖包 sudo apt-get update sudo apt-get install redis 一旦安装完成,Redis 服务将会自动启动。想要检查服务的状态,输入下面的命令: rootvims:/etc/redis# sudo systemctl status redis-server ● redis-server.service - Adva…...
ubuntu20.04+ROS+Gazebo+px4+QGC+MAVROS
目录 前言 一、安装ROS 二、安装PX4 编译 三、QGC安装 四、安装MAVROS 命令记得加sudo! 前言 在安装ubuntu20.04ROSGazebopx4QGCMAVROS时,参考了很多网上的资料,总结一个较为顺利的流程。 官方指南PX4 自动驾驶仪用户指南 | PX4 Gui…...
基于 openEuler 构建 LVS-DR 群集(同网段)。
一、LVS相关原理 1.LVS简介 LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项 目,它的官方站点是www.linuxvirtualserver.org。现在LVS已经是 Linux标准内核的一部分,在 Linux2.4内核以前&…...
计算机毕业设计PySpark+Hadoop+Hive机票预测 飞机票航班数据分析可视化大屏 航班预测系统 机票爬虫 飞机票推荐系统 大数据毕业设计
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
【设计模式】【行为型模式】观察者模式(Observer)
👋hi,我不是一名外包公司的员工,也不会偷吃茶水间的零食,我的梦想是能写高端CRUD 🔥 2025本人正在沉淀中… 博客更新速度 📫 欢迎V: flzjcsg2,我们共同讨论Java深渊的奥秘 …...
机器学习: 逻辑回归
概念与定义 逻辑回归是一种用于分类问题的统计方法。它通过计算目标变量的概率来预测类别归属,并假设数据服从伯努利分布(二分类)或多项式分布(多分类)。逻辑回归模型输出的是概率值,通常使用sigmoid函数将线性组合映射到0和1之间。 1. 概念 逻辑回归用于解决分类问题…...
域名解析—互联网世界的导航系统
在互联网的世界里,每个网站都像一座“城市”,而用户要找到这些“城市”,必须依赖一套精准的导航系统——这就是域名解析。无论是浏览网页、发送邮件,还是使用移动应用,域名解析都在背后默默支撑着用户的每一次访问。本…...
PAT乙级真题 — 1080 MOOC期终成绩(java)【测试点3超时】
对于在中国大学MOOC(http://www.icourse163.org/ )学习“数据结构”课程的学生,想要获得一张合格证书,必须首先获得不少于200分的在线编程作业分,然后总评获得不少于60分(满分100)。总评成绩的计…...
【Prometheus】如何通过prometheus监控redis实时运行状态,并实现告警通知
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...
ARM Cortex-M3/M4 权威指南 笔记【一】技术综述
一、Cortex-M3/M4 处理器的一般信息 1.1 处理器类型 ARM Cortex-M 为 32 位 RISC(精简指令集)处理器,其具有: 32位寄存器32位内部数据通路32位总线接口 除了 32 位数据,Cortex-M 处理器(以及其他任何 A…...
【Qt】定期清理程序
在现有Qt程序中实现可配置日志保存天数的代码示例,分为界面修改、配置存储和核心逻辑三部分: // 1. 在配置文件(如settings.h)中添加保存天数的配置项 class Settings { public:int logRetentionDays() const {return m_settings…...
基于51单片机的门禁刷卡器proteus仿真
地址:https://pan.baidu.com/s/1j0KAmH5pVGWZWRpT6p5hBg 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C52/AT89C51是一款经典的8位单片机,是意法半导体(STMicroelectron…...
二、数据持久化篇(深度增强版)
二、数据持久化篇(深度增强版) 2.1 JDBC Template深度解析 架构设计思想 #mermaid-svg-y2IrKiVu2gzenoCB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-y2IrKiVu2gzenoCB .error-icon{fil…...
时间敏感和非时间敏感流量的性能保证配置
论文标题 中文标题: 时间敏感和非时间敏感流量的性能保证配置 英文标题: Provisioning of Time-Sensitive and non-Time-Sensitive Flows with Assured Performance 作者信息 Luis Velasco, Gianluca Graziadei, Sima Barzegar, Marc Ruiz Optical Co…...
k8s管理工具之lens
什么是lens Lens 是当前市场上最强大的K8S IDE。它是一个独立的单机应用,可以同时运行在macOS、Windows和Linux上。 作为K8S IDE,该有的它基本都有了! 集群管理 导入已有集群 首先,你需要在 Lens 中添加你的 Kubernetes 集群。点…...
kafka介绍,kafka集群环境搭建,kafka命令测试,C++实现kafka客户端
目录 kafka介绍kafka集群环境搭建zookeeper安装与配置kafka安装与配置 kafka命令测试C实现kafka客户端librdkafka库编译新版本cmake编译cppkafka库编译C实现kafka生产者和消费者客户端 kafka介绍 定义与概述 Apache Kafka 是一个开源的分布式流处理平台,最初由 Lin…...
DeepSeek的蒸馏技术:让模型推理更快
DeepSeek系列模型,如DeepSeek-R1-Distill-Qwen-7B,采用了知识蒸馏(Knowledge Distillation)技术,这是一种强大的模型压缩和优化方法。通过蒸馏,DeepSeek模型在保持甚至提升性能的同时,实现了更快…...
SAP-ABAP:dialog界面中的数据块Event Block详解举例
在SAP的Dialog程序开发中,Event Block(事件块)是屏幕流逻辑(Flow Logic)中的关键部分,用于定义屏幕在特定事件触发时执行的逻辑。Event Block通常与ABAP模块(Module)结合使用&#x…...
微信小程序 - 模版语法
声明和绑定数据 小程序页面中使用的数据均需要在 Page() 方法的 data 对象中进行声明定义 在将数据声明好以后,需要在 WXML 中绑定数据,数据绑定最简单的方式是使用 Mustache 语法(双大括号)将变量包起来。 在 {{ }} 内部可以做…...