首页 数据库 Redis redis产生雪崩怎么解决

redis产生雪崩怎么解决

Jul 04, 2019 pm 02:24 PM

redis产生雪崩怎么解决

产生雪崩的原因:

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

基本解决思路如下:

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

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

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

Redis雪崩效应的解决方案:

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

2、消息中间件方式

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

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

解释:

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

 加入锁!

1.jpg

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

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

2、使用消息中间件解决

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

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

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

1.jpg

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

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

更多Redis相关知识,请访问Redis使用教程栏目!

以上是redis产生雪崩怎么解决的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Stock Market GPT

Stock Market GPT

人工智能驱动投资研究,做出更明智的决策

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

如何使用模式删除REDIS中的键? 如何使用模式删除REDIS中的键? Sep 14, 2025 am 12:56 AM

使用SCAN命令配合UNLINK可安全删除Redis中匹配模式的键。首先通过SCAN0MATCHpatternCOUNT批量获取键名,避免阻塞;然后用UNLINK异步删除,提升性能。推荐在命令行使用redis-cli--scan--pattern'pattern'|xargsredis-cliunlink实现高效删除,禁止在生产环境使用KEYS命令。

如何在Docker容器中运行Redis? 如何在Docker容器中运行Redis? Sep 17, 2025 am 04:16 AM

使用Docker运行Redis无需在主机安装,通过dockerrun命令即可快速启动;可自定义配置文件并挂载,实现内存策略等设置;通过命名卷redis-data持久化数据;推荐使用DockerCompose管理,便于开发环境部署与维护。

如何备份和还原Redis数据库? 如何备份和还原Redis数据库? Sep 16, 2025 am 01:06 AM

UseBGSAVEformanualorconfiguresavepointsforautomaticRDBsnapshotstobackupRedis;2.Locatethedump.rdbfileviaconfigandcopyitsecurely;3.Torestore,stopRedis,replacetheRDBfile,ensureproperpermissions,restart,andhandleAOFifenabled;4.Followbestpracticeslikesche

如何将Redis与Spring Boot应用程序集成? 如何将Redis与Spring Boot应用程序集成? Sep 19, 2025 am 01:28 AM

首先添加SpringDataRedis依赖,然后在配置文件中设置Redis连接信息,接着通过@EnableCaching启用缓存并使用缓存注解,最后通过RedisTemplate或StringRedisTemplate操作数据,实现缓存、会话存储或高速数据存取。

如何刷新REDIS数据库或所有数据库? 如何刷新REDIS数据库或所有数据库? Sep 24, 2025 am 01:30 AM

useflushdbtoclearthecurrentdatabaseorflushallforalldatabases; dersupportAsync(background)orsync(阻止)模式,withasyncpreferredinproductiontoavoidlatency。

如何在Ubuntu上安装Redis? 如何在Ubuntu上安装Redis? Sep 20, 2025 am 12:52 AM

安装Redis可通过APT或源码,APT更简单;2.更新包索引并安装redis-server;3.启动并启用开机自启;4.用redis-cliping测试得PONG;5.可选配置文件调整绑定、密码等;6.重启服务完成安装。

我应该为应用程序选择哪种持久性模型? 我应该为应用程序选择哪种持久性模型? Sep 15, 2025 am 01:13 AM

选择持久化模型需根据应用需求、负载行为和数据类型权衡。常见模型包括仅内存(快但不持久)、磁盘存储(慢但持久)、混合模式(速度与持久兼顾)和预写日志(高持久性)。若处理关键数据,应选WAL或ACID数据库;若可容忍少量数据丢失,可选内存或混合模型。同时考虑运维复杂度,如云环境应选集成好的方案。需避免常见错误,如误将快照当作持久保障、忽略崩溃恢复测试、未调优同步频率等。总之,明确优先级并进行异常场景测试是关键。

如何用超置式数据估算大型数据集的独特计数? (pfadd,pfcount) 如何用超置式数据估算大型数据集的独特计数? (pfadd,pfcount) Sep 24, 2025 am 03:04 AM

HyperLogLog在Redis中通过PFADD和PFCOUNT命令提供了一种内存高效且快速的唯一计数估计方法。1.HyperLogLog是一种概率算法,用于估计数据集中不同元素的数量,仅需少量固定内存即可处理大规模数据集,适用于跟踪独立访客或高频搜索查询等场景;2.PFADD用于向HyperLogLog添加元素,PFCOUNT则返回一个或多个结构中的唯一元素估算值;3.使用有意义的键名、直接添加字符串值、合并多HLL以避免重复计算是使用PFADD和PFCOUNT的最佳实践;4.HyperLo

See all articles