Redis雪崩效应以及解决方案

从OFED到rdma-core:手把手带你搞定Linux下RDMA开发环境的选型与搭建 本文详细介绍了在Linux系统下搭建RDMA开发环境的完整流程,涵盖OFED与rdma-core的选型对比及分步安装指南。针对高性能计算和分布式存储需求,解析RDMA技术栈的核心组件,提供环境验证与性能测试方法,帮助开发者快速构建稳定高效的开发环境。特别适合需要优化网络性能的工程师参考。 阅读详情

Redis雪崩效应以及解决方案

缓存雪崩产生的原因

 

缓存雪崩通俗简单的理解就是:由于原有缓存失效(或者数据未加载到缓存中),新缓存未到期间(缓存正常从Redis中获取,如下图)所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机,造成系统的崩溃。

 

缓存失效的时候如下图:

 

缓存失效时的雪崩效应对底层系统的冲击非常可怕!那有什么办法来解决这个问题呢?基本解决思路如下:

  第一,大多数系统设计者考虑用加锁或者队列的方式保证来保证不会有大量的线程对数据库一次性进行读写,避免缓存失效时对数据库造成太大的压力,虽然能够在一定的程度上缓解了数据库的压力但是与此同时又降低了系统的吞吐量。

 第二,分析用户的行为,尽量让缓存失效的时间均匀分布。

 第三,如果是因为某台缓存服务器宕机,可以考虑做主备,比如:redis主备,但是双缓存涉及到更新事务的问题,update可能读到脏数据,需要好好解决。

 

解决方案

1:在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。

  缓存失效时的雪崩效应对底层系统的冲击非常可怕!那有什么办法来解决这个问题呢?基本解决思路如下:

 第一,大多数系统设计者考虑用加锁或者队列的方式保证来保证不会有大量的线程对数据库一次性进行读写,避免缓存失效时对数据库造成太大的压力,虽然能够在一定的程度上缓解了数据库的压力但是与此同时又降低了系统的吞吐量。

 第二,分析用户的行为,尽量让缓存失效的时间均匀分布。

第三,如果是因为某台缓存服务器宕机,可以考虑做主备,比如:redis主备,但是双缓存涉及到更新事务的问题,update可能读到脏数据,需要好好解决。

 

 

解决方案

 

1:在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。

     注意:加锁排队只是为了减轻数据库的压力,并没有提高系统吞吐量。假设在高并发下,缓存重建期间key是锁着的,这是过来1000个请求999个都在阻塞的。同样会导致用户等待超时,这是个治标不治本的方法。

2:不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。

3:做二级缓存,A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2设置为长期(此点为补充)

 

架构如下所示时候:

如何攻击redis?

如果再redis中有1000个key,如果同一时间失效?   直接查数据库了 不再走redis了 ! 大连查询请求过来,,,,产生了雪崩效应~

这时候使用 限流 服务降级、熔断 的方案  这三个方案是针对redis的上一层的

 

Redis雪崩效应的解决方案

1、可以使用分布式锁   单机版的话本地锁

2、消息中间件方式

3、一级和二级缓存 Redis+Ehchache

4、均摊分配Redis的key的失效时间

 

解释:

 1、  当突然有大量请求到数据库服务器时候,进行请求限制。使用所的机制,保证只有一个线程(请求)操作。否则进行排队等待(集群分布式锁,单机本地锁)。减少服务器吞吐量,效率低。

 

 加入锁!

 

保证只能有一个线程进入  实际上只能有一个请求在执行查询操作

也可以在此处进行使用限流的策略~

 

2、使用消息中间件解决

  这种方案是最靠谱的方案!

   消息中间件 可以解决高并发!!!

  如果大量的请求进行访问时候,Redis没有值的情况,会将查询的结果存放在消息中间件中(利用了MQ同步特性)

   查不到时候 走MQ  

 

 3、一级二级缓存参考: https://www.cnblogs.com/toov5/p/9892910.html

 

4、均摊分配redis key的失效时间 

     不让在同一时间失效,不同key失效时间不同 哈哈

 

     

 

(王道408考研数据结构)第八章排序-第一节:排序综述 文章目录一:排序一览二:简单插入排序(1)基本思想 一:排序一览 排序方法 类别 本文 时间复杂度 是否稳定 直接插入排序 插入排序 跳转 O(n2)O\left ( n^{2}\right )O(n2) 是 二叉树深度 简单 跳转 LeetCode 递归 翻转二叉树 简单 跳转 LeetCode 递归 相同的树 简单 跳转 LeetCode 递归 是否为子树 简单 跳转 LeetCode 递归 对称二叉树 简单 跳转 LeetCode 递归 平衡二叉树 简单 跳转 阅读详情

相关推荐

流形优化: Manifold Optimization 的 全网最通俗版本详解 (一)

前言 之前忙于论文, 停更了很久。 接下来的一段时间,出于各种原因, 决定在优快云平台上做 最近在 混合波束成形 及 智能反射面 领域 非常常见的流形优化 (Manifold Optimization) 算法 的专题介绍。尽管目前已有了不少的中文博客, 但出于其各种弊端, 使得本篇的成文仍有其不可或缺的意义。 而如果要盘点最核心的意义, 就在于这篇是对读者的 数学能力 与 阅读理解能力 要求最低的 流形优化讲解了。 唯一参考的文献为 Manopt 工具包作者 Boumal 的 新书: An introd

B417科研笔记 2万+

数据库 | Redis 缓存雪崩解决方案

Redis 雪崩 缓存层承载着大量的请求,有效保护了存储层。但是如果由于缓存大量失效或者缓存整体不能提供服务,导致大量的请求到达存储层,会使存储层负载增加,这就是缓存雪崩的场景。 解决缓存雪崩,可以从以下几个方面入手。 1.保持缓存层的高可用性 使用Redis 哨兵模式或者Redi...

weixin_30480583的博客 1354

步科触摸屏编程

1.首先官网上下载kinco软件,然后再安装驱动,安装的方式是需要两个文件。把两个文件放到driver文件夹下面,然后设备管理器右键更新,手选driver文件夹,自动安装即可。 步科触摸屏驱动文件下载地址 2.按照步科触摸屏使用手册一步一步来建立工程 Kinco HMIware使用手册下载地址 登录界面 涉及到的是页面切换,用的是login window,然后只留下等级输入那个

MAYBE的博客 2万+

Redis缓存雪崩问题:原理、解决方案与最佳实践

在使用Redis作为缓存系统时,缓存雪崩是一个常见的问题。缓存雪崩是指缓存中大量数据同时过期,导致大量请求直接到达数据库,从而导致数据库压力增大。本文将介绍Redis缓存雪崩问题的原理、解决方案以及最佳实践。二、Redis缓存雪崩问题的解决方案。三、Redis缓存雪崩问题的最佳实践。一、Redis缓存雪崩问题的原理。

My_wife_QBL的博客 1879

Python爬虫实战:手把手教你用Selenium绕过药监局网站的反爬机制(附完整代码)

本文详细介绍了如何使用Selenium绕过药监局网站的反爬机制,提供了一套完整的Python爬虫实战方案。通过浏览器指纹伪装、动态等待策略、会话维持技巧以及分布式采集设计,帮助开发者高效爬取药监局数据,解决政府类网站常见的反爬挑战。

weixin_42620255的博客 737

从ADRV9002到ADRV9003:手把手教你移植FPGA驱动,避开那些官方没说的坑

本文详细介绍了从ADRV9002到ADRV9003的FPGA驱动移植实战指南,重点解析了两者在硬件架构上的关键差异,如通道配置和DPD功能的移除。通过提供完整的移植步骤、调试技巧和性能优化建议,帮助工程师避开官方文档未提及的常见陷阱,实现高效驱动开发。

weixin_28738397的博客 175

redis雪崩问题处理办法

Redis雪崩问题是指在缓存大面积失效或者缓存集中到期时,大量的请求同时涌入数据库,导致数据库负载急剧增加,从而引发的一系列问题。在缓存集中到期之前,提前对热点数据进行预热,将热点数据提前加载到缓存中,避免缓存失效时大量请求涌入数据库。使用多级缓存策略,将缓存数据分散到不同的缓存节点或者不同的缓存服务器中,减少缓存集中到期的风险。可以监控缓存的命中率、缓存失效率、数据库负载等指标,及时发现潜在的雪崩风险。可以采用随机过期时间,将缓存过期时间分散开来,减少缓存同时失效的概率。

Li_789的博客 749

win10自动修复-无限循环【通用完美】超简单解决办法

2020.02.14今个我的笔记本电脑(Thinkpad Carbon 7 X1)(win10)早晨起来发现蓝屏,上面显示自动修复失败,重启后依然自动修复失败,不断手动重启,始终是修复失败。然后上网开始搜集资料找解决办法。 前边介绍关闭自动修复,如何找出错文件的方法;如果想看最终解决办法,直接看第三部分 上网就会发现这种现象很常见,同时是电脑自动安装系统更新,或者安装某些驱动出现。解决办法也大...

y15941300574的博客 19万+

Redis雪崩以及解决方法

Redis中大量缓存数据在同一时间过期(失效)或者Redis故障宕机时,如果此时有大量的用户请求,都无法在Redis中处理,于是全部请求都直接访问数据库,从而导致数据库的压力骤增,严重的会造成数据库宕机,从而形成一系列连锁反应,造成整个。2.缓存空值或者默认值,当发现缓存穿透的现象时,可以针对查询的数据,在缓存中设置一个空值或者默认值,这样后续请求就可以从缓存中读取到空值或者默认值,返回给应用,使其不会继续查询数据库。,导致请求在访问缓存时,发现缓存缺失,再去访问数据库时,发现数据库中也没有要访问的数据。

2401_83691559的博客 755

【滚雪球学数学建模】第4.1节·概率与统计建模,一文搞懂!

🎓 本文收录于 《滚雪球学数学建模》专栏,本专栏专注于从零基础出发,带你循序渐进掌握数学建模的核心方法与思维路径。通过“滚雪球式”学习法,从最简单的生活化案例到经典建模工具,再到省赛、国赛真题实战演练,逐步积累知识与技能,帮助你搭建完整的建模体系。无论你是刚接触建模的新生,还是希望提升科研与竞赛能力的学者与工程师,本专栏都将为你提供一条清晰、高效、可实操的建模成长路线,助力你快速进阶,突破难点,迈向数学建模竞赛与实际应用的更高峰 🚀!

**My Coding Family** 1349

三峡大学-微机原理与接口技术实验

其中,A15接E1,因此,A15为1,A14A13A12A11A10A9A8A7通过八输入与非门74LS30与E2连接,因此A14A13A12A11A10A9A8A7为11111111,A6A5A4与CBA连接,因此A6A5A4为101,A3A2A1A0不参与译码,因此IO5的地址范围为1111 1111 1101 0000B~1111 1111 1101 1111B,即0FFD0H~0FFDFH。如图1所示,若IO0输出为低电平,则需要E1接高电平,E2接低电平,E3接低电平,CBA的输入为000。

m0_62222486的博客 496

Redis--缓存雪崩及解决方案

本文的内容讲的是使用Redis做缓存的过程中,出现的缓存雪崩问题及解决方案。

CJPSR的博客 2903

【DL经典回顾】距离度量大汇总(7-余弦距离(Cosine Distance))

余弦距离(Cosine Distance)衡量的是两个向量在方向上的差异性,而不是在大小上的差异。

悦学共鸣,温柔以待,汇聚光芒,共同成长 2579

Redis雪崩效应的解决方案(转)

1、可以使用分布式锁 单机版的话本地锁 当突然有大量请求到数据库服务器时候,进行请求限制。使用所的机制,保证只有一个线程(请求)操作。否则进行排队等待(集群分布式锁,单机本地锁)。减少服务器吞吐量,效率低。 保证只能有一个线程进入 实际上只能有一个请求在执行查询操作 也可以在此处进行使用限流的策略~ 2、缓存标记 public object GetProductListNew() ...

仲夏先森的博客 919

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

面试官:了解雪崩效应吗?了解Hystrix吗?怎么解决雪崩效应吗?(大型社死现场,教你运筹帷幄之中)

上篇我们模拟了高并发场景下,系统资源被耗尽导致其他接口访问非常之慢。至此,这篇给出了五种解决方案(当然这个是次要的,主要还是理解原理) 上篇地址:https://blog.youkuaiyun.com/Kevinnsm/article/details/117302197?spm=1001.2014.3001.5501 文章目录一、雪崩效应是什么?二、什么是Hystrix?三、Hystrix用来解决什么问题?四、雪崩效应的五大解决方案1、请求缓存Ⅰ、redis安装Ⅱ、代码配置Ⅲ、启动测试接口Ⅳ、模拟2500访问量高并.

Kevinnsm的博客 288

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Redis知识点

AOF和RDB AOF(Append Only File): 将每次写命令记录到单独的日志文件中(类似Mysql的binlog),Redis重启执行AOF文件中的命令恢复数据 RDB(默认): 是将进程数据写入文件中 开启AOF: 在配置文件中配置 appendonly yes Redis优点 读写性能优异 支持数据持久化, 支持AOF和RDB两种持久化方式 支持主从复制, 主机会自动...

qq_42451640的博客 276

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

使用redis分布式锁解决秒杀和高并发问题

(一)redis技术的使用: redis真的是一个很好的技术,它可以很好的在一定程度上解决网站一瞬间的并发量,例如商品抢购秒杀等活动。。。 redis之所以能解决高并发的原因是它可以直接访问内存,而以往我们用的是数据库(硬盘),提高了访问效率,解决了数据库服务器压力。 为什么redis的地位越来越高,我们为何不选择memcache,这是因为memcache只能存储字符串,而redis存储类型很...

qq_31207917的博客 924

redis在项目中遇到的问题:

1).缓存穿透的问题: 一般出现这样的问题,是因为当我们查询一条肯定不存在的数据的时候,缓存中没有,就会透过缓存来查询数据库,数据库也不存在,这样就会将值保存在缓存中最后还是缓存和数据库中都没有,如果一直访问这条数据。我们就对数据库进行频繁的查询给数据库带来压力 解决办法:当查询的时候,如果缓存和数据库中都没有,我们就将这个数据以空的形式存放在缓存中,(或者是给一个false的标示)这样就不用...

qq_39081437的博客 1099

redis 查看key的有效期_Redis

转自:Redis常见面试题 - 問天 - 博客园​www.cnblogs.com介绍:Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API的非关系型数据库。传统数据库遵循 ACID 规则。而 Nosql(Not Only SQL 的缩写,是对不同于传统的关系型数据库的数据库管理系统的统...

weixin_29372549的博客 3410

redis key热点以及解决方案

目录   一、热点Key问题产生的原因 1 高频读写:点赞  2单个server极限 二、热点Key问题的危害 击穿  雪崩 三、解决方案 1、服务端缓存方案 Ehcache:   FIFO     LRU    LFU 2、使用 Memcache、Redis 方案 3、使用本地缓存方案 4、读写分离方案解决热读 5、热点数据解决方案 四、热点 key 处理 1、热点数...

lucky的专栏 635

Redis设计与实现

转载收藏一下这篇文章 Redis缓存设计  设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效.   1) 缓存击穿:对于一些设置了过期时间的key, 刚好过期的时候,这时候有个高并发的请求,会导致直接访问数据库,危险.(批量放入时这么用的)先把缓存更新,再更新数据库。单个的时候先更新数据库,再更新缓存  2) 缓存穿透:查询一个一定不存在的数据,导致直接访问

心有猛虎,细嗅蔷薇! 1641

Day94 Redis

3.allkeys-lfu:和lru是有区别的、这个在淘汰的时候、淘汰的是全体key的集合、不是过期的key的集合(过期这一说法没有)、这就意味着你没有设置过期时间的key 只要使用的比较少那么依然会被淘汰。1.noeviction:只要缓存满了、那么就不继续服务器里面的写的请求、读的请求是可以完成的、这种模式缓存里面的所有数据 都不会丢失、这种情况会导致参与Redis的业务会失败(记住默认的)

weixin_69595694的博客 813

Redis面试题

什么是应用服务雪崩 雪崩问题 分布式系统都存在这样一个问题,由于网络的不稳定性,决定了任何一个服务的可用性都不是 100% 的。当网络不稳定的时候,作为服务的提供者,自身可能会被拖死,导致服务调用者阻塞,最终可能引发雪崩连锁效应。 缓存雪崩 当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统(比如DB)带来很大压力,造成数据库后端故障,从而引起应用服务器雪崩。 雪...

李玉坤的博客 1376

Redis入门

Redis缓存中间件 一、什么是Redis? 高性能的内存Key-Value数据库。 二、应用场景? 1、数据缓存 2、会话共享 3、秒杀场景 4、抢红包场景 5、预约排号 6、消息队列 7、分布式锁场景 8、分布式事务场景 9、分布式唯一ID生成 10、附近的人场景 三、Redis的安装 第一步:官网下载安装包 官网地址:https://redis.io/ 第二步:上传安装包到linux系统 第三步:解压安装包 tar -zxvf redis-6.0.8.tar.gz 第四步:编译Redis源文件 ma

weixin_40901926的博客 452

Redis

1、什么是Redis? Redis 是完全开源免费的, 遵守 BSD 协议, 是一个高性能的 key-value 数据库。 Redis 与其他 key - value 缓存产品有以下三个特点: Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 Redis 不仅仅支持简单的 key-value 类型的数据, 同时还提供 list, set, zset, hash 等数据结构的存储。 Redis 支持数据的备份, 即 master-slave 模式的数据备份

CentOS 272
上一篇: Redis集群与事务
下一篇: Redis穿透问题解决方案
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值