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

Redis 之 缓存预热 缓存雪崩 缓存击穿 缓存穿透

目录

一、缓存预热

1.1 缓存预热是什么?

1.2 解决方案:

二、缓存雪崩

2.1 缓存雪崩是什么?怎么发生的?

2.2 怎么解决

三、缓存穿透

3.1 是什么?怎么产生的呢?

3.2 解决方案

 3.2.1、采用回写增强,

 3.2.2、加上一个布隆过滤器,

四、缓存击穿

4.1 是什么?

4.2 怎么解决

五、总结


一、缓存预热

1.1 缓存预热是什么?

缓存预热是指在系统启动或者高峰期之前,提前将数据加载到缓存中,避免在用户请求的时候,先查询数据库(这样第一个查询的人就会比较慢),再把查询结果回写到redis当中去。

1.2 解决方案:

为了防止用户访问的时候Redis中没有数据,所以提前将热点数据保存到Redis里面(通过LRU数据删除策略,可以得到高频数据队列),通过脚本的方式将热点数据提前加入。

二、缓存雪崩

2.1 缓存雪崩是什么?怎么发生的?

缓存雪崩是指在缓存系统中,大量缓存数据同时失效或过期,导致请求直接打到数据库或后端服务,从而引起数据库压力过大或服务崩溃的现象。

  • redis 主机挂了, Redis全盘崩溃,偏硬件运维
  • redis 中有大量key 同时过期大面积失效,偏软件开发

2.2 怎么解决

1、针对于redis服务器问题,可以采用redis的高并发策略:使用主从复制 + 哨兵 ,或者直接使用redis集群模式,并且这时候需要开启redis的持久化机制,方便从机上位的时候能够快速恢复之前的数据。

2、多缓存预防雪崩:不仅仅只用redis这么一个缓存,也可以在本地加上一个ehcache缓存,把哪些高频信息给存储进来,这样就不需要所有的数据都需要去redis上面去找了。

3、服务降级: 直接就不让用户前来访问容易出现问题的信息了,直接提示当前访问人数过多,请稍后再试。

 4、人民币玩家:直接使用阿里云的云数据库redis版

三、缓存穿透

3.1 是什么?怎么产生的呢?

缓存穿透 就是请求去查询一条数据,先查redis,redis里面没有,再查mysql,mysql里面无,都查询不到该条记录,但是请求每次都会打到数据库上面去,导致后台数据库压力暴增

缓存穿透可能是由于恶意攻击缓存设置不当或者数据更新频繁等原因引起的。

缓存穿透最怕的情况就是黑客恶意攻击,比如他现在知道了你key的格式:abc xxx,正好这个数据你的redis没有,MySQL当中也没有,那么他就会一直查这个,导致你的redisMySQL接受一次次的暴击。怎么解决这个问题呢?

3.2 解决方案

 3.2.1、采用回写增强,

既然都是黑客了,逃过布隆过滤器还不是简简单单?

如果发生了缓存穿透,我们可以针对要查询的数据,在Redis里存一个和业务部门商量后确定的缺省值(比如,零、负数、defaultNull等)。

比如,键uid:abcdxxx,值defaultNull作为案例的key和value

先去redis查键uid:abcdxxx没有,再去mysql查没有获得 ,这就发生了一次穿透现象。

but,可以增强回写机制

mysql也查不到的话也让redis存入刚刚查不到的key并保护mysql。这样等下次再来查这个值的时候,就不会发生缓存穿透了。

但是,此方法架不住黑客的恶意攻击,有缺陷......,只能解决key相同的情况,假如黑客可以找到不同的key,总不能每个key都回写到redis里吧?这时候我们就需要新的解决方法了。

 3.2.2、加上一个布隆过滤器

布隆过滤器可以过滤掉大部分不存在的情况(当然也有一定的漏判率)。我们在数据访问redis之前可以先让他去通过一下布隆过滤器,如果布隆中没有,那么就是肯定没有,直接返回就行了。

四、缓存击穿

4.1 是什么?

缓存击穿就是大量请求同时查询一个key(或一批)时,此时这个key正好失效了,就会导致大量的请求都打到数据库上面去,也就是热点key突然都失效了,MySQL承受高并发量

简单说就是:热点key突然失效,导致MySQL被暴打

4.2 怎么解决

  1. 设置热点数据的永不过期策略:对于一些非常热门的数据,可以将其缓存时间设置为永不过期,这样可以避免缓存失效导致的击穿问题。但需要注意,这种方式可能会导致缓存数据不及时更新的问题。

  2. 互斥更新,采用双检加锁机制

    多个线程同时去查询数据库的这条数据,那么我们可以在第一个查询数据的请求上使用一个 互斥锁来锁住它

    其他的线程走到这一步拿不到锁就等着,等第一个线程查询到了数据,然后做缓存。后面的线程进来发现已经有缓存了,就直接走缓存。

五、总结

相关文章:

Redis 之 缓存预热 缓存雪崩 缓存击穿 缓存穿透

目录 一、缓存预热 1.1 缓存预热是什么? 1.2 解决方案: 二、缓存雪崩 2.1 缓存雪崩是什么?怎么发生的? 2.2 怎么解决 三、缓存穿透 3.1 是什么?怎么产生的呢? 3.2 解决方案 3.2.1、采用回写增强&a…...

Golang 程序性能优化利器 PGO 详解(二):收集样本数据和编译

在软件开发过程中,性能优化是不可或缺的一部分。无论是在Web服务、数据处理系统还是实时通信中,良好的性能都是至关重要的。Golang 从1.20版版本开始引入的 Profile Guided Optimization(PGO)机制能够帮助更好地优化 Go 程序的性能…...

《格斗之王AI》使用指南

目录 一、说明 二、步骤 1. 下载 2.配置环境 3.替换 4.测试 5.训练 一、说明 该项目是 针对B站UP主 林亦LYi 的作品 格斗之王!AI写出来的AI竟然这么强!的使用指南,目的是在帮助更多小白轻松入门,一起感受AI的魅力。 林亦LYi…...

创新引领城市进化:人工智能和大数据塑造智慧城市新面貌

人工智能和大数据等前沿技术正以惊人的速度融入智慧城市的方方面面,为城市的发展注入了强大的智慧和活力。这些技术的应用不仅令城市管理更高效、居民生活更便捷,还为可持续发展和创新奠定了坚实的基础。 在智慧城市中,人工智能技术正成为城市…...

iOS开发-处理UIControl触摸事件TrackingWithEvent

IOS BUG记录 之 处理UIControl的点击事件。 UIControl的触摸事件的方法是beginTrackingWithTouch:withEvent:,continueTrackingWithTouch:withEvent:,endTrackingWithTouch:withEvent:,cancelTrackingWithEvent: ##下面简单的介绍一下 beg…...

学无止境·运维高阶⑤(LVS-DR 群集 配置Nginx负载均衡)

LVS-DR 群集 && 配置Nginx负载均衡 一、LVS-DR 群集1、相关配置环境2、在RS上配置并启动脚本2.1相关脚本2.2 启动脚本,另一台RS同样步骤 3、LVS-DR模式配置脚本4、测试 二、Nginx负载均衡1、安装Nginx并关闭相应设置2、向主机 node2,node3 写入内…...

badger的mainfest文件解读

1. mainfest文件的作用 mainfest文件是记录lsm tree中的各层tables表的创建删除记录的一个日志文件,主要的作用是badger数据库重启后,重新恢复内存中的各层tables表 2、内容结构 先是8个字节的魔数,魔数的结构如下 ----------------------…...

java导出excel浏览器下载,单线程VS多线程

java导出excel浏览器下载,单线程VS多线程 package com.mengyang.transactional.other.excelxssf; import com.mengyang.transactional.other.myselfExcel.ExcelUtils; import com.mengyang.transactional.pojo.ZhongXinDTO; import org.apache.poi.ss.usermodel.*…...

【rust/egui】(二)看看template的main函数:日志输出以及eframe run_native

说在前面 rust新手,egui没啥找到啥教程,这里自己记录下学习过程环境:windows11 22H2rust版本:rustc 1.71.1egui版本:0.22.0eframe版本:0.22.0上一篇:这里 开始 首先让我们看看main.rs中有些什么…...

Eigen在QT中的配置

Eigen简介 Eigen支持包括固定大小、任意大小的所有矩阵操作,甚至是稀疏矩阵;支持所有标准的数值类型,并且可以扩展为自定义的数值类型;支持多种矩阵分解及其几何特征的求解;它不支持的模块生态系统提供了许多专门的功能…...

微服务04-elasticsearch

1、es概念 1.1 文档和字段 elasticsearch是面向**文档(Document)**存储的,可以是数据库中的一条商品数据,一个订单信息。文档数据会被序列化为json格式后存储在elasticsearch中: 而Json文档中往往包含很多的字段(Field),类似于数据库中的列。 1.2 索引和映射 索引(…...

uniapp 微信小程序 订阅消息

第一步&#xff0c;需要先去小程序官方挑选一下订阅模板拿到模板id 订阅按钮在头部导航上&#xff0c;所以 <u-navbar :bgColor"bgColor"><view class"u-nav-slot" slot"left" click"goSubscribe"><image :src"g…...

JDK8日期时间工具类

此文章为笔记&#xff0c;为阅读其他文章的感受、补充、记录、练习、汇总&#xff0c;非原创&#xff0c;感谢每个知识分享者。 文章目录 1. 旧版日期时间的问题2. 新日期时间API介绍3. 日期时间的常见操作4. 日期时间的修改和比较5. 格式化和解析操作6. Instant类7. 计算日期…...

智汇云舟入选IDC《中国智慧城市数字孪生技术评估,2023》报告

8月7日&#xff0c;国际数据公司&#xff08;IDC&#xff09;发布了《中国智慧城市数字孪生技术评估&#xff0c;2023》报告。智汇云舟凭借在数字孪生领域的创新技术与产品&#xff0c;入选《2023中国数字孪生城市技术提供商图谱》。 报告通过公开征集的形式进行申报&am…...

《Zookeeper》源码分析(九)之选举通信网络

在上一篇文章中讲到QuorumCnxManager&#xff0c;它负责zookeeper服务器在选举期间最底层的网络通信&#xff0c;整个网络涉及到的类如下&#xff1a; 整个网络建立的过程如下&#xff1a; 选举前创建好QuorumCnxManager实例&#xff0c;并在QuorumCnxManager构造函数中创建好…...

JVM——栈和堆概述,以及有什么区别?

方法栈 方法栈并不是某一个 JVM 的内存空间&#xff0c;而是我们描述方法被调用过程的一个逻辑概念。 在同一个线程内&#xff0c;T1()调用T2()&#xff1a; T1()先开始&#xff0c;T2()后开始&#xff1b;T2()先结束&#xff0c;T1()后结束。 堆和栈概述 从英文单词角度来…...

恒盛策略:沪指冲高回落跌0.26%,酿酒、汽车等板块走弱,燃气股拉升

10日早盘&#xff0c;两市股指盘中冲高回落&#xff0c;半日成交约4200亿元&#xff0c;北向资金净卖出超20亿元。 到午间收盘&#xff0c;沪指跌0.26%报3235.9点&#xff0c;深成指跌0.54%&#xff0c;创业板指跌0.28%&#xff1b;两市算计成交4202亿元&#xff0c;北向资金净…...

Mongodb 常用操作

// 查询 user_id 是否存在 db.getCollection("t_mongo_user").find({"user_id" : { $exists: true }}) // 查询 user_id 10 的记录 db.getCollection("t_mongo_user").find({"user_id" : 10}) // 排序 -1&#xff0c;按照 _id 倒…...

【python】-【】

文章目录 转义字符和原字符二进制与字符编码标识符和保留字变量的定义和使用变量字符串列表for 一、print会输出①数字②字符串&#xff08;必须加引号&#xff09;③含有运算符的表达式&#xff08;例如 31 其中3&#xff0c;1是操作数&#xff0c;是运算符&#xff09;&#…...

基于Elman神经网络的电力负荷预测

1 案例背景 1.1 Elman神经网络概述 根据神经网络运行过程中的信息流向,可将神经网络可分为前馈式和反馈式两种基本类型。前馈式网络通过引入隐藏层以及非线性转移函数可以实现复杂的非线性映射功能。但前馈式网络的输出仅由当前输人和权矩阵决定,而与网络先前的输出结果无关。…...

Apex压枪宏终极指南:如何快速提升射击精度与稳定性

Apex压枪宏终极指南&#xff1a;如何快速提升射击精度与稳定性 【免费下载链接】Apex-NoRecoil-2021 Scripts to reduce recoil for Apex Legends. (auto weapon detection, support multiple resolutions) 项目地址: https://gitcode.com/gh_mirrors/ap/Apex-NoRecoil-2021 …...

Maxwell磁场仿真实战:无线传能线圈建模与优化

1. 无线传能线圈建模基础 第一次用Maxwell做无线传能线圈仿真时&#xff0c;我对着空白的建模界面发呆了半小时——到底该从哪下手&#xff1f;后来发现&#xff0c;把复杂问题拆解成小步骤才是关键。我们先从最简单的单匝圆环线圈开始&#xff0c;就像学画画先从画圆圈开始一…...

Alibaba DASD-4B Thinking 对话工具Java集成实战:SpringBoot微服务调用指南

Alibaba DASD-4B Thinking 对话工具Java集成实战&#xff1a;SpringBoot微服务调用指南 最近在做一个企业内部的智能助手项目&#xff0c;后端系统需要接入一个靠谱的对话模型来处理客服咨询和员工问答。选型时&#xff0c;Alibaba DASD-4B Thinking 对话工具进入了我们的视野…...

Xtreme Download Manager:解决大文件下载与视频抓取难题的终极方案

Xtreme Download Manager&#xff1a;解决大文件下载与视频抓取难题的终极方案 【免费下载链接】xdm Powerfull download accelerator and video downloader 项目地址: https://gitcode.com/gh_mirrors/xd/xdm 你是否曾因下载大文件速度缓慢而烦恼&#xff1f;是否想在Y…...

别再用旧系统了!给高通410板子(JZ02_V10)刷上OpenWRT,顺便搞定短信转发(保姆级避坑)

高通410开发板OpenWRT改造指南&#xff1a;从刷机到短信转发全流程解析 手里那块吃灰的高通410开发板终于有了用武之地&#xff01;相比原厂Debian系统的臃肿和功能局限&#xff0c;OpenWRT带来的不仅是轻量级路由体验&#xff0c;更能通过基带模块实现短信转发等实用功能。本文…...

你的Windows图片查看体验还停留在石器时代吗?ImageGlass带你进入现代图像浏览新纪元

你的Windows图片查看体验还停留在石器时代吗&#xff1f;ImageGlass带你进入现代图像浏览新纪元 【免费下载链接】ImageGlass &#x1f3de; A lightweight, versatile image viewer 项目地址: https://gitcode.com/gh_mirrors/im/ImageGlass 还在忍受Windows自带的图片…...

Android RTMP推流实战:从零搭建Nginx服务器到实现摄像头直播

1. 环境准备&#xff1a;搭建Nginx-RTMP服务器 第一次接触直播服务器搭建时&#xff0c;我对着命令行界面手足无措的样子还历历在目。现在回头看&#xff0c;其实用Nginx搭建RTMP服务器就像组装乐高积木&#xff0c;只要按步骤来就能成功。这里我推荐在Ubuntu系统上操作&#x…...

从Quad-Bayer到最终成片:手把手拆解手机48MP传感器背后的Remosaic与Demosaic流程

从Quad-Bayer到最终成片&#xff1a;手把手拆解手机48MP传感器背后的Remosaic与Demosaic流程 当你在智能手机上轻触"高像素模式"按钮时&#xff0c;那颗微小的图像传感器内部正上演着一场精密的数字魔术。现代48MP Quad-Bayer传感器通过像素排列重组与色彩还原技术&a…...

如何用LeaguePrank一键创新你的英雄联盟游戏展示体验?

如何用LeaguePrank一键创新你的英雄联盟游戏展示体验&#xff1f; 【免费下载链接】LeaguePrank 项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank LeaguePrank是一款专为英雄联盟玩家设计的智能创意工具&#xff0c;通过本地化数据展示创新技术&#xff0c;让…...

大模型---RLHF

目录 1.RLHF的定义 2.LLM的RLHF 3.奖励模型 4.RLHF的主要问题与局限 5.“非显式RL”方法 (1)DPO (2)RRHF 后续有更深入学习,再继续补充: 1.RLHF的定义 RLHF(Reinforcement Learning from Human Feedback,基于人类反馈的强化学习)的核心思想就是先让人告诉模型…...