Redis缓存热点引发的思考

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

01—背景

 

一开始并没有打算梳理redis的相关内容,因为在一篇文章中看到关于热点问题的处理,心中有一些疑惑,内容如下:

缓存热点:

对于特别热的数据,如果大部分甚至所有的业务都命中同一份缓存数据,则这份数据所在缓存服务器压力就很大,例如,某明星微博发布“我们”来宣告恋爱了,则短时间内有成千上万的用户都来围观。

缓存热点解决方案:

就是复制多份缓存,将请求分散到多个缓存服务器上,减轻缓存热点导致的单台缓存服务器压力,以新浪微博为例,对于粉丝超过100万的明星,每一条微博都可以生成100分缓存,缓存的数据都是一样的,通过缓存key里面加编号进行分区,每次读缓存都随机读取其中某份缓存。

解决思路是没有问题的,是通过备份相同的数据到多台缓存服务器中,缓解分散单台服务器的压力,我的疑惑是"通过缓存key里面加编号进行分区"这种方式是怎么确保使需要保存的数据都分散到不同的服务器呢?redis集群根据key进行hash散列算法,最终映射的是槽位,不同的缓存服务器分别管理的是一些列表槽位,怎么保证通过key计算出来的槽位值正好不在同一台机器上呢?

带着这个疑问点,开始了redis复制,哨兵,集群内容的整理。

  

 

02—内容梳理

 

复制

在分布式系统中,为了解决单点问题,通常会把数据复制多个副本部署到其他的机器,满足故障恢复和负载均衡的需求。哨兵和集群模式都是在复制的基础上实现的高可用。

图片

 

redis复制拓扑极其应用

拓扑结构分为一主一从,一主多从,树状多从结构。

  

1. 一主一从结构

 

图片

应用场景:主节点出现宕机时,从节点提供故障转移支持

当写命令并发量较高并且需要持久化时,可以在从节点开启AOF,这样既保证了数据的安全也避免了持久化对于主节点的影响。

注意:

当主节点关闭持久化功能,在从节点实现的时候,如果主节点脱机要避免主节点自动重启,因为主节点没有开启持久化功能,自动重启后数据集为空,这时如果从节点继续复制主节点会导致从节点数据也被清空。

解决方案:

在从节点执行slaveof no one断开与主节点的复制关系,再重启主节点避免这种情况。

 

2.  一主多从结构

 

图片

利用多个节点实现读写分离,适用于读占比大的场景,把读命令发送到从节点来分担主节点压力。

日常开发中,执行一些比较耗时的读命令,可以在其中的一个从节点上进行,防止慢查询对主节点造成阻塞   

 

3. 树状主从结构

 

图片

从节点不但可以复制主节点的数据,同时可以作为其他从节点的主节点继续向下层复制。

有效的降低主节点的负载和需要传送给从节点的数据量,降低主节点压力。

 

 <

Redis缓存热点key问题解决方案 主要介绍了Redis缓存热点key问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 立即下载

相关推荐

JetLinks社区版VS企业版:手把手教你用PostgreSQL+Redis搭建物联网中台(Win7实测)

本文详细对比了JetLinks社区版与企业版的核心差异,并提供了在Windows 7系统上,使用PostgreSQL和Redis搭建物联网中台的完整部署教程。文章深入解析了从环境准备、后端服务构建到前端部署的每一步,为开发者在资源有限环境下构建高性价比物联网平台提供了清晰的实战指南。

w1x2y3的博客 280

如何使用redis热点数据的缓存

然后使用aop 首先我们使用around 注解 对我们自定义的注解进行环绕通知 因为我们使用的环绕通知可以 使用ProcessdingJoinPoint 类型 然后通过这个对象获取该注解下的方法的参数 以及注解中的前缀 进行拼装key 然后去redis 中获取 如果获取到了则直接返回 如果缓存中获取不到 则。

qwe_tj的博客 786

金融数字化——详解2025年金融智能体深度应用报告【附全文阅读】

《2025年金融智能体深度应用报告》显示,金融智能体已实现80%部署率,推动行业效率提升30%-50%。报告指出智能体通过"感知-推理-规划-执行-进化"机制突破大模型局限,在风控、客服、投研等100+场景实现自动化。典型案例显示,工商银行信贷审批效率提升60%,蚂蚁数科智能客服解决80%问题。尽管面临系统协同、标准缺失等挑战,未来趋势将向多模态交互、自主进化和ESG投资等方向拓展。

cdfunlove的博客 187

Redis热点数据缓存

我是廖志伟,一名Java开发工程师、幕后大佬社区创始人、Java领域优质创作者、CSDN博客专家。拥有多年一线研发经验,研究过各种常见框架及中间件的底层源码,对于大型分布式、微服务、三高架构(高性能、高并发、高可用)有过实践架构经验。

我是Java程序员廖志伟,感谢朋友们的支持! 2872

Redis应用场景1-热点数据缓存

Redis在实际开发中有哪些应用场景?下面我将结合Redisson来演示Redis热点数据缓存、计数器、队列、发布/订阅、分布式锁…等场景下的应用。

麋鹿智灵AI,在AI领域一起变现 1176

Java方法设计原则与实践:从Effective Java到团队案例

作者:京东物流 京东物流本文详细讲解下Redis热点key发现机制+客户端缓存的原理。一、redis4.0之基于LFU的热点key发现机制业务中存在访问热点是在所难免的,然而如何发现热点key一直困扰着许多用户,redis4.0为我们带来了许多新特性,其中便包括基于LFU的热点key发现机制。Redis中的LFU思路Lea...

cnzzs的博客 659

Redis缓存热点数据

本项目使用Redis作为缓存层,采用经典的Cache-Aside模式提升系统性能。主要缓存店铺信息和店铺类型数据,通过统一键命名规范(如"cache:shop:"前缀)和合理过期时间设置(30分钟)实现高效缓存。查询时先检查Redis,命中则直接返回,未命中则查询数据库后写入缓存。实现中特别注意空值处理和JSON序列化,并提出了缓存预热、粒度控制等优化建议。该方案显著提高了响应速度,减轻了数据库压力,且易于扩展新数据类型。

ajsbxi的博客 1276

Redis热点Key问题分析与解决

不知道你们有没有遇到过这种现象:Redis缓存中数据存储不多,但是集群中某些个别节点的Redis实例CPU消耗和内存、网络等资源负载很高,有时候还可能莫名奇妙的某个节点宕机。遇到以上问题的时候,那基本恭喜你了,大多数情况下,不出意外的话,可能就是遇到了热点Key问题。那么Redis热点Key形成的原因是什么呢?该如何检测?该如何解决呢?如果你有这样的疑问,那就来看看我的文章吧!

qq_25409421的博客 2555

Redis缓存穿透,缓存击穿,缓存雪崩的思考和辨析

缓存穿透这个问题不强调单一时间尺度数据传来过量请求导致数据库难以处理这些“同时”传过来的请求,强调的是到数据不走基于内存的缓存而是走数据库本身这个行为和redis期望结果不一致,强调的是绕过缓存的无效查询对数据库的持续压力)首先这三个问题都是由缓存未命中这个状态引发的,缓存穿透这个问题指的是由于查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的key每次请求都要到数据库去查询,进而给数据库带来压力。简单的来说是串行的穿透数据库的单个值。

weixin_63031917的博客 739

亿级系统的Redis缓存如何设计?

知识分享,以技会友。大家好,我是Tom哥。阅读本文大约需要 15 分钟。缓存设计可谓老生常谈了,早些时候都是采用memcache,现在大家更多倾向使用redis,除了知晓常用的数据存储类型,结合业务场景有针对性选择,好像其他也没有什么大的难点。工程中引入Redis Client二方包,初始化一个Bean实例RedisTemplate ,一切搞定,so easy。如果是几十、几百并发的业务场景,缓存设计可能并不需要考虑那么多,但如果是亿级的系统呢?首先,先了解缓存知识图谱早期的缓存用于加速CPU数据

公众号:微观技术 2394

Redis缓存击穿:原理与解决方案

缓存穿透是指查询不存在的数据,导致请求直接落到数据库上。缓存中没有数据,且数据库中也没有数据。缓存中没有数据,但数据库中有数据。在众多缓存技术中,Redis因其高性能和易用性被广泛应用于各种场景。然而,在实际应用中,缓存击穿问题时常困扰着开发者。缓存击穿,顾名思义,是指当缓存中某个热点数据过期,同时大量请求同时访问该数据时,导致数据库瞬间承受巨大压力,从而引发的一系列问题。

我是Java程序员廖志伟,感谢朋友们的支持!不定期贡献一篇高品质、过万文字、图文并茂且附有视频解说、满载代码示例注释的良心之作,坚决杜绝粗制乱造。 989

缓存雪崩、击穿、穿透是什么与解决方案

博客的参考资料:请大家多多支持小林coding , 讲的确实细我只能说前言,博主在学习Redis时就思考过加入Redis 挂了 或者 同时有大量数据没有写入Redis 导致数据被冲击 等 问题, 当时没有系统总结, 最近看了小林coding 和一些 博客 , 我自己也 做了一些总结,,我加了一些示例,希望能帮助到读者。

cjejwe的博客 2371

Redis缓存雪崩:原因、影响与解决方案

在众多分布式系统中,Redis 作为一种高性能的内存数据库,被广泛应用于缓存场景。然而,在实际应用中,Redis 缓存系统可能会遇到一种名为“缓存雪崩”的问题,这将对系统的稳定性造成严重影响。因此,深入了解缓存雪崩的概念与定义,对于保障系统稳定运行具有重要意义。缓存雪崩是指在短时间内,大量缓存数据同时过期,导致系统请求直接访问数据库,从而引发数据库压力激增,甚至可能导致数据库崩溃。这种情况通常发生在以下场景:假设一个电商网站,其商品信息缓存Redis 维护。

我是Java程序员廖志伟,感谢朋友们的支持!不定期贡献一篇高品质、过万文字、图文并茂且附有视频解说、满载代码示例注释的良心之作,坚决杜绝粗制乱造。 1071

Redis 缓存架构与高并发问题终极解法

本文系统介绍了Redis缓存的应用场景及解决方案。首先阐述了缓存的基本概念和多级缓存架构,指出Redis能有效降低数据库压力并提升读写效率。接着重点分析了缓存三大核心问题:1)缓存穿透通过空值缓存和布隆过滤解决;2)缓存雪崩采用随机过期时间、集群部署和多级缓存应对;3)缓存击穿通过互斥锁和逻辑过期两种方案处理。文章详细对比了不同方案的实现原理和适用场景,并提供了完整的Java代码实现,包括缓存工具类封装。最后强调在电商等高并发场景下,合理使用Redis缓存对系统性能提升的关键作用。

2403_87933448的博客 1395

Redis 缓存设计谈起:如何避免缓存击穿、穿透与雪崩

在应用层增加限流与降级策略,即使缓存失效,也要限制数据库的最大并发访问,避免“缓存挂了,数据库也跟着挂”的连锁反应。解决方式并不复杂,但非常容易被忽视:在设置过期时间时引入随机因子,让 key 的失效时间分散开来,从概率上避免“同时过期”的情况。在工程实践中,缓存穿透往往来自两个来源:一是业务上的“合法但不存在”的请求,比如查询一个已被删除或从未存在的用户;常见的工程手段是引入互斥机制,比如在缓存失效时,通过分布式锁或本地锁保证只有一个请求可以访问数据库并重建缓存,其余请求等待或短暂返回旧值。

fcy222fcy的博客 754

MySQL 系统学习 第六阶段:Redis + 缓存 + 高并发设计 第五章:缓存穿透、缓存击穿、缓存雪崩

穿透查不到数据,击穿热点数据过期,雪崩大量数据同时过期;企业通常通过缓存空值、互斥锁和随机 TTL 来解决。

flhhly的博客 198
上一篇: 爆赞!2021年阿里P9纯手打十亿级高并发系统手册,开源分享
下一篇: Springboot+Netty+Websocket实现消息推送实例
Java斗帝之路
博客等级 码龄6年 2390粉丝 687原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值