Redis基础知识(三):缓存穿透、缓存击穿、缓存雪崩

news2024/10/6 10:28:02

文章目录

  • 一、缓存穿透
    • 出现过程
    • 解决方法
  • 二、缓存击穿
    • 出现过程
    • 解决方法
  • 三、缓存雪崩
    • 出现过程
    • 解决方法

 我们在项目中大量使用Redis承接海量数据的冲击,但是使用过程中也会遇到一些特殊的情况,这个就是缓存击穿、缓存穿透、缓存雪崩。

一、缓存穿透

缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,进而给数据库带来压力。
即:缓存无数据,数据库也无数据

出现过程

假如客户端每秒发送5000个请求,其中4000个为黑客的恶意攻击,即在数据库中也查不到。举个例子,用户id为正数,黑客构造的用户id为负数,如果黑客每秒一直发送这4000个请求,缓存就不起作用,数据库也很快被打死。

在这里插入图片描述

解决方法

对请求参数进行校验,不合理直接返回
查询不到的数据也放到缓存,value为空,如 set -999
使用布隆过滤器,快速判断key是否在数据库中存在,不存在直接返回

第一种是最基本的策略,第二种其实并不常用,第三种比较常用。

为什么第二种并不常用呢?

因为如果黑客构造的请求id是随机数,第二种并不能起作用,反而由于缓存的清空策略,(例如清除最近没有被访问的缓存)导致有用的缓存被清除了。

二、缓存击穿

缓存击穿就是当请求参数过来,缓存中的数据瞬间过期,此时并发量又大,全部请求直接同时转为去请求数据库,瞬间给数据库带来巨大压力。
即:缓存无数据,数据库有数据,key比较集中

出现过程

设置了过期时间的key,承载着高并发,是一种热点数据。从这个key过期到重新从MySQL加载数据放到缓存的一段时间,大量的请求有可能把数据库打死。缓存雪崩是指大量缓存失效,缓存击穿是指热点数据的缓存失效。

解决方法

设置key永远不过期,或者快过期时,通过另一个异步线程重新设置key
当从缓存拿到的数据为null,重新从数据库加载数据的过程上锁,下面写个分布式锁实现的demo

三、缓存雪崩

缓存雪崩是指缓存中数据大批量同时到过期时间。
即:缓存无数据,数据库有数据,key比较分散

和缓存击穿不同的是,缓存击穿指并发查同一条数据,缓存雪崩是不同数据都过期了,很多数据都查不到从而查数据库。

出现过程

假设有如下一个系统,高峰期请求为5000次/秒,4000次走了缓存,只有1000次落到了数据库上,数据库每秒1000的并发是一个正常的指标,完全可以正常工作,但如果缓存宕机了,或者缓存设置了相同的过期时间,导致缓存在同一时刻同时失效,每秒5000次的请求会全部落到数据库上,数据库立马就死掉了,因为数据库一秒最多抗2000个请求,如果DBA重启数据库,立马又会被新的请求打死了,这就是缓存雪崩。
在这里插入图片描述

解决方法

事前:redis高可用,主从+哨兵,redis cluster,避免全盘崩溃
事中:本地ehcache缓存 + hystrix限流&降级,避免MySQL被打死
事后:redis持久化RDB+AOF,快速恢复缓存数据
缓存的失效时间设置为随机值,避免同时失效

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/974290.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ApachePulsar原理解析与应用实践(学习笔记一)

随着时代的发展,软件设计的理念也在不断发展,从单体服务、面向服务、微服务,发展到云原生以及无服务。其演变的过程是一个能力不断增强,领域边界不断微分细化的过程。比如无服务就是将函数作为服务,就类似dns模式的服务…

RK3568开发笔记(六):开发板烧写ubuntu固件(支持mipi屏镜像+支持hdmi屏镜像)

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/132686096 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

【Python】pytorch,CUDA是否可用,查看显卡显存剩余容量

CUDA可用,共有 1 个GPU设备可用。 当前使用的GPU设备索引:0 当前使用的GPU设备名称:NVIDIA T1000 GPU显存总量:4.00 GB 已使用的GPU显存:0.00 GB 剩余GPU显存:4.00 GB PyTorch版本:1.10.1cu102 …

webpack实战:某网站JS逆向分析

文章目录 1. 写在前面2. 抓包分析3. 扣加密代码 1. 写在前面 好的逆向能够帮助我们了解加密实现,然后根据加密方式(md5,base64,res,des,rsa…)还原加密算法的过程。可以看看我之前的这篇文章:快速定位查找加密方式特征与技巧 目标站点&#…

Qt应用开发(基础篇)——向导对话框 QWizard

一、前言 QWizard类继承于QDialog,为有向导界面需求的应用环境提供了一个框架。 对话框窗口 QDialog QWizard向导对话框是一个拥有队列界面的特殊对话框,向导的目的是引导用户一步一步的完成预设的流程。向导常用于软件安装界面向导、硬件线路安装向导、…

【Linux】Ubuntu20.04版本配置pytorch环境2023.09.05【教程】

【Linux】Ubuntu20.04版本配置pytorch环境2023.09.05【教程】 文章目录 【Linux】Ubuntu20.04版本配置pytorch环境2023.09.05【教程】一、安装Anaconda虚拟环境管理器二、创建虚拟环境并激活三、安装Pytorch四、测试pytorchReference 一、安装Anaconda虚拟环境管理器 首先进入…

《西方美学史》分享1

《西方美学史》分享1 这本书是岭南大学中文系教授许子东老师推荐的,而且这本书名气也非常大。 刚读完绪论和第一章。 这本书可以带领我们去思考,现实社会中“美”是什么,什么是美的。我们总在说“真善美”,“真”和“善”就是美…

恒运资本:光刻胶概念强势拉升,同益股份、格林达涨停,容大感光等走高

光刻胶概念5日盘中强势拉升,到发稿,同益股份、格林达涨停,波长光电、晶瑞电材涨超7%,容大感光涨逾5%,华懋科技、茂莱光学、苏大维格、南大光电等均走强。 消息面上,据新加坡《联合早报》网站9月2日报导&am…

恒运资本:北交所股票全红!不到10分钟30%涨停,“认房不认贷”发力了!

今天早盘,A股震荡上扬,上证指数、深证成指等重要股指高开高走,并均涨超1%,两市成交略有增加。 盘面上,房地产、家居用品、煤炭、钢铁等板块涨幅居前,光刻机、软件服务、半导体、机器视觉等板块跌幅居前。北…

k8s 搭建基于session模式的flink集群

1.flink集群搭建 不废话直接上代码,都是基于官网的,在此记录一下 Kubernetes | Apache Flink flink-configuration-configmap.yaml apiVersion: v1 kind: ConfigMap metadata:name: flink-configlabels:app: flink data:flink-conf.yaml: |jobmanager…

sa-token学习

官方文档地址:sa-token

解决六大痛点促进企业更好使用生成式AI,亚马逊云科技顾凡采访分享可用方案

亚马逊云科技大中华区战略业务发展部总经理顾凡在接受21世纪经济报道记者专访时表示,生成式人工智能将从四个方面为企业带来机遇:第一是创造全新的客户体验;第二是提高企业内部员工的生产力;第三是帮助企业提升业务运营效率&#…

苹果“嘴硬”?下载超出预期,否认开发者对 Vision Pro 兴趣不高

据报道,苹果于上个月在全球多个城市开设了Vision Pro开发者实验室,旨在让开发者尽早体验并研发这款令人期待的头显技术。这一为期一天的实验室活动邀请了一些开发人员前来测试和上手Vision Pro头显,并亲身体验其应用的真实效果。 在活动中&am…

GE HYDRAN M2气体监测系统

气体监测: HYDRAN M2系统能够监测变压器或油冷却电缆系统中的气体,包括氢气、乙炔、甲烷、乙烷和乙烯等。这些气体的生成和积累可能是绝缘材料故障的迹象。 实时监测: 该系统能够实时监测气体浓度的变化,以及油的温度和压力等参数…

软考·系统架构师——导学

文章目录 考试简介考试安排考试科目《综合知识》考点分布历年案例分析考点历年论文考点 最新消息:自2023年下半年起,计算机软件资格考试的考试方式均由纸笔考试改革为计算机化考试。 考试简介 计算机技术与软件专业技术资格(水平)…

前端 -- 基础 常用标签 ( 标题标签、段落标签、换行标签 )

标题标签 <h1> - <h6> HTML 提供了 6 个等级的网页标题&#xff0c;即 <h1> - <h6> <h1> 我是一级标题 </h1> 单词 head 的缩写&#xff0c;意味 头部&#xff0c;标题 。 上示&#xff0c;即 你在 <h1> </h1> 两个…

【java】【项目实战】[外卖十二]【完结】项目优化(前后端分离开发)

目录 一、问题说明 二、前后端分离开发 1、介绍 2、开发流程 3、前端技术栈 三、Yapi 1、介绍 2、部署 3、使用 3.1 添加项目​编辑 3.2 添加分类​编辑 3.3 添加接口 3.4 运行 3.5 导出接口 3.6 导入数据 四、Swagger 1、介绍 2、使用方式 2.1 pom 2.2 导入…

加餐2|面试问题:古人怎么向别人推荐自己?

好诗相伴&#xff0c;千金不换&#xff0c;你好&#xff0c;我是天博。 这一讲的加餐&#xff0c;我想和你聊一聊古人是怎么求职的。现代人求职一般都是面向心仪的公司&#xff0c;先投简历再面试&#xff0c;核心就是向用工单位推荐自己。古人也差不多。我们之前在第十二讲里…

项目管理:项目经理如何做好时间管理?

在项目执行过程中&#xff0c;往往会因突发问题&#xff0c;导致项目的延期。任何一个项目都无法回避最终交付日期&#xff0c;并且所有的活动都严格围绕时间坐标进行。因此&#xff0c;对项目进行合理的时间管理&#xff0c;才是保证项目顺利交付的关键。那么&#xff0c;如何…

js中call、apply和bind:

文章目录 一、区别:二、案例&#xff1a;三、实现&#xff1a;【1】call实现【2】apply实现【3】bind实现 一、区别: call、apply、bind相同点&#xff1a;都是改变this的指向&#xff0c;传入的第一个参数都是绑定this的指向&#xff0c;在非严格模式中&#xff0c;如果第一个…