Redis使用场景-缓存-缓存雪崩

前言

之前在针对实习面试的博文中讲到Redis在实际开发中的生产问题,其中缓存穿透、击穿、雪崩在面试中问的最频繁,本文加了图解,希望帮助你更直观的了解缓存雪崩😀
(放出之前写的针对实习面试的关于Redis生产问题的博文链接)
Redis生产问题(缓存穿透、击穿、雪崩)——针对实习面试

什么是缓存雪崩?

缓存雪崩是指:在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。这种场景就像雪崩一样,所以叫缓存雪崩

在这里插入图片描述

缓存雪崩可能由以下几个原因引起:

  1. 缓存数据集中过期:如果缓存数据的过期时间设置不合理,比如很多缓存数据设置为在同一时间过期,那么在过期时刻,缓存将无法提供数据,导致请求直接落到数据库上。

  2. 缓存服务不可用:如果缓存服务由于某些原因(如宕机、网络问题等)变得不可用,那么所有的请求都会直接访问数据库。

  3. 数据库压力过大:当大量的请求直接访问数据库时,如果数据库没有足够的能力处理这些请求,可能会导致数据库响应缓慢甚至崩溃。

怎么解决缓存雪崩

解决缓存雪崩的最常用措施包括:

1. 过期时间随机化

为了避免大量缓存数据在同一时间过期,可以给缓存数据的过期时间加上一个随机值。这样,即使有大量数据需要设置为过期,它们也不会在同一时刻全部失效,从而减少了对数据库的瞬间压力。

图表:

+----------------+         +--------+         +------------+
|                |  过期   |        |  请求    |            |
|  用户请求数据   +-------->+  缓存   +-------->+  数据库     |
|                |         |        |         |            |
+----------------+         +--------+         +------------+

在缓存设置中加入随机过期时间,可以避免大量缓存数据在同一时间过期,从而减少数据库的压力 。

2. 搭建Redis高可用集群

通过搭建Redis高可用集群,可以有效地防止缓存雪崩问题的发生。如果主节点发生故障,从节点可以接管服务,继续提供缓存服务,避免了由于单点故障导致的缓存雪崩问题。

图表:

+--------+         +--------+
|        |         |        |
|  Redis  +------->+  Redis |
|  Master|         | Slave  |
|        |         |        |
+--------+         +--------+

通过Redis的主从复制、双主、读写分离等策略,提高数据库的容灾能力 。

3. 限流和降级策略

在缓存雪崩时,可以采取限流、降级等策略,减缓数据库的压力。例如,在缓存失效后,通过加锁或者使用队列来控制读数据库写缓存的线程数量。具体点就是设置某些Key只允许一个线程查询数据和写缓存,其他线程等待。则能够有效的缓解大并发流量对数据库打来的巨大冲击 。

4. 数据预热

在系统上线前,提前将热点数据加载到缓存中,避免大量请求同时触发缓存未命中的情况 。

如何实现:

  • 使用定时任务,比如 xxl-job,来定时触发缓存预热的逻辑,将数据库中的热点数据查询出来并存入缓存中。
  • 使用消息队列,比如 Kafka,来异步地进行缓存预热,将数据库中的热点数据的主键或者 ID 发送到消息队列中,然后由缓存服务消费消息队列中的数据,根据主键或者 ID 查询数据库并更新缓存

5. 多级缓存架构

使用本地缓存(如 Caffeine、Guava 等)和分布式缓存(如 Redis)相结合的方式,部分热点数据可以先放入本地缓存,降低 Redis 和数据库的压力 。

6. Redis 高可用

部署 Redis 主从集群,使用 Redis 的哨兵模式(Sentinel)或者 Redis Cluster 来实现高可用,避免缓存服务器单点故障 。

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

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

相关文章

RabbitMQ快速入门

文章目录 一. 引入依赖二. 编写生产者代码1. 创建连接2. 创建channel3. 声明一个队列4. 发送消息5. 释放资源6. 运行代码 三. 编写消费者代码1. 创建连接2. 创建channel3. 声明队列4. 消费消息5. 释放资源6. 运行代码 一. 引入依赖 <!-- https://mvnrepository.com/artifact…

如何设计一套对外开放的API体系

生态建设越来越常见&#xff0c;开放自身API给外部伙伴使用&#xff0c;再正常不过&#xff0c;当然不能仅仅暴露个API出来就算完事了&#xff0c;还需要经过详细的设计及验证。 以下是对设计对外开放 API 的每个要点的进一步展开阐述&#xff1a; 明确目标和需求 深入了解业务…

信号和槽思维脑图+相关练习

将登录框中的取消按钮使用信号和槽的机制&#xff0c;关闭界面。 将登录按钮使用信号和槽连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;密码是否为"123456",如果账号密码匹配成功&#xff0c;当前界面关…

uniapp h5 vue3 m3u8 和 mp4 外链视频播放

m3u8视频播放 使用mui-player 和hls.js。 安装npm install mui-player hls.js我的版本是"hls.js": "^1.5.17"和"mui-player": "^1.8.1"使用 页面标签&#xff1a; 引用&#xff1a; 点击目录播放视频&#xff1a; m3u8视频播放&a…

php项目流水线flow的创建能部署与使用

在云服务器平台上使用 PHP 项目创建、配置、部署和使用流水线&#xff0c;可以通过阿里云 DevOps 服务来自动化 CI/CD&#xff08;持续集成与持续交付&#xff09;流程。以下是详细的步骤和指导&#xff0c;帮助你完成 PHP 项目的流水线设置和部署。 ### 1. 创建流水线 #### …

借助 AI 工具,共享旅游-卡-项目助力年底增收攻略

年底了&#xff0c;大量的商家都在开始筹备搞活动&#xff0c;接下来的双十二、元旦、春节、开门红、寒假&#xff0c;各种活动&#xff0c;目的就是为了拉动新客户。 距离过年还有56 天&#xff0c;如何破局&#xff1f; 1、销售渠道 针对旅游卡项目&#xff0c;主要销售渠道…

软件工程——期末复习(3)

一、题目类(老师重点提到过的题目) 1、高可靠性是否意味着高可用性&#xff1f;试举例证明自己的观点&#xff1f; 答&#xff1a;高可靠性不意味着高可用性 可靠性说明系统已经准备好&#xff0c;马上可以使用&#xff1b;可用性是系统可以无故障的持续运行&#xff0c;是一…

程序员需要具备哪些知识?

程序员需要掌握的知识广泛而深厚&#xff0c;这主要取决于具体从事的领域和技术方向。不过&#xff0c;有些核心知识是共通的&#xff0c;就像建房子的地基一样&#xff0c;下面来讲讲这些关键领域&#xff1a; 1. 编程语言&#xff1a; 无论你是搞前端、后端、移动开发还是嵌…

[Blender]从零开始的blender导入PMX模型教程

一、前言 最近正在接触3D打印&#xff0c;目前我发现&#xff0c;在开源的模型市场上3D的人物模型非常有限并且部分还维持收费。所以就有了一个想法&#xff0c;能不能自己制作3D打印的人物模型。目前虽然开源的3D打印人物模型比较少&#xff0c;但是以PMX开源的人物模型却非常…

C#与PLC通讯时,数据读取和写入浮点数,字节转换问题(ModbusTCP)

在与PLC进行通讯时&#xff0c;会发现一个问题&#xff0c;浮点数1.2接收过来后&#xff0c;居然变成了两个16位的整数。 经过一系列的分析&#xff0c;这是因为在PLC存储浮点数时32位&#xff0c;我们接收过来的数据会变成两个16位的高低字节&#xff0c;而且我们进行下发数据…

替代FTP最佳跨网文件传输解决方案——FileLink

在传统的企业文件传输中&#xff0c;FTP&#xff08;文件传输协议&#xff09;曾因其便捷性和高效性被广泛应用。然而&#xff0c;其固有的安全漏洞、对大文件传输支持的局限性、易受网络攻击等问题&#xff0c;已逐渐暴露出FTP在现代企业环境下的不足。针对这一问题&#xff0…

纯粹直播 1.7.7 |手机版和TV版,聚合六大直播平台,原画播放

纯粹直播是一款开源的应用程序&#xff0c;支持兴趣化主题的游戏直播、户外直播和才艺直播节目。目前可以观看斗鱼、B站、虎牙和抖音等六大直播平台的内容。该应用适配了安卓手机和电视盒子平台使用&#xff0c;并且软件无广告&#xff0c;提供原画质播放体验。 大小&#xff…

汉诺塔(递归)

递归、搜索与回溯算法 文章目录 递归、搜索与回溯算法前言一、递归的思想二、汉诺塔三、为什么可以使用递归思想&#xff1f;四、代码实现 Leetcode汉诺塔 前言 这是记录我学习算法的一个专题&#xff0c;如果你正在备战这类比赛&#xff0c;我想这对你一定有帮助。 一、递归…

【JUC-锁升级】简要版本

锁升级过程 一、偏向锁二、轻量级锁三、重量级锁四、整体流程 为什么不全部使用Synchronized、Lock等重量级锁呢&#xff1f; 重量级锁底层是基于操作系统的互斥锁实现的&#xff0c;涉及到用户态与内核态之间的切换。 一、偏向锁 如果只有一个线程A频繁的访问某一个共享资源…

C++小碗菜之二:软件单元测试

“没有测试的代码重构不能称之为重构&#xff0c;它仅仅是垃圾代码的到处移动” ——Corey Haines 目录 前言 什么是单元测试&#xff1f; 单元测试的组成 单元测试的命名 单元测试的独立性 Google Test 单元测试的环境配置与使用 1. Ubuntu下安装 Google Test 2. 编写…

家庭财务管理系统的设计与实现ssm小程序+论文源码调试讲解

2系统关键技术 2.1 微信小程序 微信小程序&#xff0c;简称小程序&#xff0c;英文名Mini Program&#xff0c;是一种全新的连接用户与服务的方式&#xff0c;可以快速访问、快速传播&#xff0c;并具有良好的使用体验。 小程序的主要开发语言是JavaScript&#xff0c;它与普…

linux运维命令

防火墙相关命令 防火墙规则查看 firewall-cmd --list-all 禁ping firewall-cmd --permanent --add-rich-rulerule protocol valueicmp drop firewall-cmd --reload 执行完以上命令后&#xff0c;通过firewall-cmd --list-all查看规则生效情况 firewall-cmd --list-all 其…

高通---Camera调试流程及常见问题分析

文章目录 一、概述二、Camera配置的整体流程三、Camera的代码架构图四、Camera数据流的传递五、camera debug FAQ 一、概述 在调试camera过程中&#xff0c;经常会遇到各种状况&#xff0c;本篇文章对camera调试的流程进行梳理。对常见问题的提供一些解题思路。 二、Camera配…

HCIA-openGauss_2_1数据库安装部署

本章导读 openGauss是关系型数据库&#xff0c;采用客户端/服务器&#xff0c;单进程多线程架构&#xff0c;支持单机和一主多备部署方式&#xff0c;备机可读&#xff0c;支持双机高可用和读扩展。 本章详细介绍了安装openGauss的环境和安装部署配置、openGauss数据库的连接…

《Tyche: Stochastic In-Context Learning for Medical Image Segmentation》CVPR2024

摘要 这篇论文介绍了一个名为Tyche的模型&#xff0c;它用于医学图像分割任务。Tyche通过使用上下文集来为以前未见过的任务生成随机预测&#xff0c;无需重新训练。该模型解决了两个主要问题&#xff1a;1) 对于大多数新的分割任务&#xff0c;需要重新训练或微调新模型&…