Redis常见的问题

news/2024/5/19 18:49:09/文章来源:https://blog.csdn.net/weixin_72755481/article/details/127345869

① 缓存雪崩

缓存雪崩是指在短时间内,有⼤量缓存同时过期,导致⼤量的请求直接查询数据库,从⽽对数据库造成 了巨⼤的压⼒,严重情况下可能会导致数据库宕机的情况叫做缓存雪崩。

我们先来看下正常情况下和缓存雪崩时程序的执⾏流程图,正常情况下系统的执⾏流程如下图所示:

缓存雪崩的执⾏流程,如下图所示:

 

以上对⽐图可以看出缓存雪崩对系统造成的影响,那如何解决缓存雪崩的问题?

缓存雪崩的常⽤解决⽅案有以下⼏个。

加锁排队

加锁排队可以起到缓冲的作⽤,防⽌⼤量的请求同时操作数据库,但它的缺点是增加了系统的响应时 间,降低了系统的吞吐量,牺牲了⼀部分⽤户体验。

随机化过期时间

为了避免缓存同时过期,可在设置缓存时添加随机时间,这样就可以极⼤的避免⼤量的缓存同时失效。 

// 缓存原本的失效时间
int exTime = 10 * 60;
// 随机数⽣成类
Random random = new Random();
// 缓存设置
jedis.setex(cacheKey, exTime+random.nextInt(1000) , value);

设置⼆级缓存

⼆级缓存指的是除了 Redis 本身的缓存,再设置⼀层缓存,当 Redis 失效之后,先去查询⼆级缓存。 例如可以设置⼀个本地缓存,在 Redis 缓存失效的时候先去查询本地缓存⽽⾮查询数据库。 加⼊⼆级缓存之后程序执⾏流程,如下图所示:

② 缓存穿透 

缓存穿透是指查询数据库和缓存都⽆数据,因为数据库查询⽆数据,出于容错考虑,不会将结果保存到 缓存中,因此每次请求都会去查询数据库,这种情况就叫做缓存穿透。

缓存穿透执⾏流程如下图所示:

其中红⾊路径表示缓存穿透的执⾏路径,可以看出缓存穿透会给数据库造成很⼤的压⼒。 缓存穿透的解决⽅案有以下⼏个。

缓存空结果

另⼀种⽅式是我们可以把每次从数据库查询的数据都保存到缓存中,为了提⾼前台⽤户的使⽤体验 (解 决⻓时间内查询不到任何信息的情况),我们可以将空结果的缓存时间设置的短⼀些,例如 3-5 分钟。

③ 缓存击穿

缓存击穿指的是某个热点缓存,在某⼀时刻恰好失效了,然后此时刚好有⼤量的并发请求,此时这些请 求将会给数据库造成巨⼤的压⼒,这种情况就叫做缓存击穿。

缓存击穿的执⾏流程如下图所示: 

它的解决⽅案有以下 2 个。

加锁排队

此处理⽅式和缓存雪崩加锁排队的⽅法类似,都是在查询数据库时加锁排队,缓冲操作请求以此来减少 服务器的运⾏压⼒。

设置永不过期

对于某些热点缓存,我们可以设置永不过期,这样就能保证缓存的稳定性,但需要注意在数据更改之 后,要及时更新此热点缓存,不然就会造成查询结果的误差。

④ 缓存预热

⾸先来说,缓存预热并不是⼀个问题,⽽是使⽤缓存时的⼀个优化⽅案,它可以提⾼前台⽤户的使⽤体验。

缓存预热指的是在系统启动的时候,先把查询结果预存到缓存中,以便⽤户后⾯查询时可以直接从缓存 中读取,以节约⽤户的等待时间。

缓存预热的执⾏流程,如下图所示:

 

缓存预热的实现思路有以下三种:

  • 1. 把需要缓存的⽅法写在系统初始化的⽅法中,这样系统在启动的时候就会⾃动的加载数据并缓存数 据;
  • 2. 把需要缓存的⽅法挂载到某个⻚⾯或后端接⼝上,⼿动触发缓存预热;
  • 3. 设置定时任务,定时⾃动进⾏缓存预热。 

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker安装tomcat、mysql、redis

一、tomcat 1.下载tomcat8docker pull tomcat:8.5.612.启动容器(-d 后台启动)docker run -d -p 8080:8080 tomcat:8.5.61 3.访问首页http://ip:8080/访问不到 404 解决:需要修改tomcat下的文件夹 如下 进入后webapps.dist改为webapps 二、mysql 1.拉取mysqldocker pull mys…

网课题搜答案公众号接口系统

网课题搜答案公众号接口系统 本平台优点: 多题库查题、独立后台、响应速度快、全网平台可查、功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 查题校园题库:查题校园题库后台&#xf…

分布式数据库的基本概念

1.分布式数据库系统的产生和定义 产生原因: 经济的发展:经济发展:跨国公司:产生一个地方需要管理另外一个地方数据的需求 发展历程: 20世纪70年代末 成长于80年代 第一个数据库系统SDD-1是美国计算机公司(CAA)于1976年-1978年…

浏览器插件官方demo学习(一):基本代码、页面渲染、书签、cookie、Omnibox等

前言 参考:https://github.com/GoogleChrome/chrome-extensions-samples 官方目前只提供了几个基于v3版本的例子,其他例子都是基于v2版本的(可能是官方比较忙,没空写例子吧)。先从v3版本的例子开始学习,后…

JVM(六) —— 运行时数据区之堆的详细介绍(一)

JVM(六) —— 运行时数据区之虚拟机栈的详细介绍核心概述堆空间代码演示堆空间划分(重要)一个Java程序运行起来是一个进程,这个进程对应着一个JVM实例,一个JVM实例对应着一个运行时数据区。而一个运行时数据…

JAVA设计模式-组合模式

目录 1、例子 2、组合模式基本定义 总结: 1、例子 编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系 组成,一个学校有多个学院,一个学院有多个系传统解决方案: 分析:…

一起学solidity写智能合约——整型(uint和int)

前言 整型一般用的比较多,会在各个合约中见到整型的存在,那么这个类型也是学习路上不可或缺的 环境: remix编译器点我跳转 正文 我们在sol中遇得到很多类型为整型的数据,所以我们的sol提供了两种数据类型的整型: …

基于物联网的户外环境检测装置设计

目 录 摘 要 1 Abstract 2 第1章 绪论 4 1.2 选题背景及意义 4 1.2 研究现状 4 1.3本课题的发展趋势和研究可行性 5 1.4研究主要内容 5 第2章 基于物联网的户外环境检测装置设计概述和相关原理 6 2.1 系统的概述 6 2.1.1 总体设计方案 6 2.1.2 总体框图 6 2.2 相关理论 7 2.2.1…

算法优化 | MATLAB实现BO-RF贝叶斯优化随机森林算法

算法优化 | MATLAB实现BO-RF贝叶斯优化随机森林算法 目录 算法优化 | MATLAB实现BO-RF贝叶斯优化随机森林算法效果一览基本介绍模型结构程序设计学习总结参考资料效果一览 基本介绍 针对集成学习参数众多,缺乏高效准确的参数寻优方法的问题,提出了基于贝叶斯优化随机森林方法…

k8s 中的 service 如何找到绑定的 Pod 以及如何实现 Pod 负载均衡

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…

RK3588+AI工业视觉检测设计方案

本文详细介绍了基于Rockchip RK3588芯片的AI边缘计算主板外形、尺寸、技术规格,以及详细的硬件接口设计参考说明,使客户可以快速将RK3588边缘计算主板应用于工业互联网、智慧城市、智慧安防、智慧交通,智慧医疗等人工智能领域的智能终端设备。…

自定义ClassLoader

一,如何自定义classLoader? 需要使用加载器的loadClass方法:ClassLoader().loadClass 查看loadClass方法源码 首先检查加载,调用父5加载器开始双亲委派机制, 如果没有加载到,就调用findClass方式 打开发现…

JVM加载class文件的原理机制

JVM加载class文件的原理机制 JVM中类的装载是由类加载器(ClassLoader)和它的子类来实现的; 当Java程序需要使用某个类时,JVM会确 保这个类已经被加载、连接(验证、准备和解析)和初始化。 类的加载是指把类的.class文件中的数据 读入到内存中&#xff0c…

神经网络中各个隐藏层,深度神经网络隐藏层数

1、神经网络的隐含层节点数怎么设置啊?比如要设置18层隐含节点数!跪求,工作急用! 隐层一般是一层或两层,很少会采用三层以上,至少隐层的节点数确定,一般有以下几种方法:1、有经验的…

【ArchSummit】通过ArchSummit 全球架构师峰会对企业数字化转型的思考

前言 📫 作者简介:小明java问道之路,专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码,就职于大型金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &a…

生命在于学习——Socket编程(偏安全方面)

本篇文章仅用于学习记录和交流,不得用于其他违规用途,产生的不良后果,自己负责。 一、Socket介绍 首先socket (套接字) 是工作在应用层和传输层之间一个抽像层 , 为什么要有他呢 ? 虽然我们已经有了ipport可以和世界上任意一台计算机上的软…

chainlink 小实战 web3 “捐助我”项目合约及前端交互——关于 《Patrick web3 course Lesson 7-8 》课程代码中文详解

FundMe lesson 的 示例 本质上是一个合约上对 eth 接收和发送的演示,但这个演示增加了前端 ethers 的交互,以及对 chainlink 预言机喂价的使用。 总体来说是一些 Defi 项目上的某一块功能的缩影,不过总体来说还是挺简单的。 若不会 chainli…

(附源码)计算机毕业设计SSM基于JAVA人事管理系统

(附源码)计算机毕业设计SSM基于JAVA人事管理系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术…

Android系统10 RK3399 init进程启动(四十二) init.rc文件解析逻辑

配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask 说明 系统:Android10.0 设备: FireFly RK3399 (ROC-RK3399-PC-PLUS) 前言 Android init启动的时候会解析init.rc, 当然还有很多其他rc文…

DPR和REALM论文笔记

DPR(2020 EMNLP) 该论文的模型主要是一个双塔结构如下所示: 整个模型的训练数据D包含m个例子,其中每个例子由一个问题qiq_iqi​、一个相关段落pip_i^pi​、n个不相关段落pi,1−,⋯,pi,n−p_{i,1}^-,\cdots,p_{i,n}^-pi,1−​,⋯,pi,n−​ D{⟨qi,pi,pi,…