亿级请求下多级缓存那些事,你全部吃下了吗?

亿级流量电商详情页系统的大型高并发与高可用缓存架构实战 课程基于真实的每日上亿流量的大型电商网站中的商品详情页系统,作为项目实战。详细讲解如何实现一个复杂的缓存系统架构,去直接支撑电商背景下的高并发与高性能的访问,同时基于缓存架构本身所处的复杂分布式系统架构环境下,如何设计与实现一个高可用的分布式系统架构。 阅读详情

什么是多级缓存

所谓多级缓存,即在整个系统架构的不同系统层级进行数据缓存,以提升访问效率,这也是应用最广的方案之一。我们应用的整体架构如图1所示:

图1 多级缓存方案

文末有福利赠送,如果你感兴趣的话可以去领取架构资料。

整体流程如上图所示:

1)首先接入Nginx将请求负载均衡到应用Nginx,此处常用的负载均衡算法是轮询或者一致性哈希,轮询可以使服务器的请求更加均衡,而一致性哈希可以提升应用Nginx的缓存命中率,相对于轮询,一致性哈希会存在单机热点问题,一种解决办法是热点直接推送到接入层Nginx,一种办法是设置一个阀值,当超过阀值,改为轮询算法。

2)接着应用Nginx读取本地缓存(本地缓存可以使用Lua Shared Dict、Nginx Proxy Cache(磁盘/内存)、Local Redis实现),如果本地缓存命中则直接返回,使用应用Nginx本地缓存可以提升整体的吞吐量,降低后端的压力,尤其应对热点问题非常有效。

3)如果Nginx本地缓存没命中,则会读取相应的分布式缓存(如Redis缓存,另外可以考虑使用主从架构来提升性能和吞吐量),如果分布式缓存命中则直接返回相应数据(并回写到Nginx本地缓存)。

4)如果分布式缓存也没有命中,则会回源到Tomcat集群,在回源到Tomcat集群时也可以使用轮询和一致性哈希作为负载均衡算法。

5)在Tomcat应用中,首先读取本地堆缓存,如果有则直接返回(并会写到主Redis集群),为什么要加一层本地堆缓存将在缓存崩溃与快速修复部分细聊。

6)作为可选部分,如果步骤4没有命中可以再尝试一次读主Redis集群操作。目的是防止当从有问题时的流量冲击。

7)如果所有缓存都没有命中只能查询DB或相关服务获取相关数据并返回。

8)步骤7返回的数据异步写到主Redis集群,此处可能多个Tomcat实例同时写主Redis集群,可能造成数据错乱,如何解决该问题将在更新缓存与原子性部分细聊。

应用整体分了三部分缓存:应用Nginx本地缓存、分布式缓存、Tomcat堆缓存,每一层缓存都用来解决相关的问题,如应用Nginx本地缓存用来解决热点缓存问题,分布式缓存用来减少访问回源率、Tomcat堆缓存用于防止相关缓存失效/崩溃之后的冲击。

虽然就是加缓存,但是怎么加,怎么用细想下来还是有很多问题需要权衡和考量的,接下来部分我们就详细来讨论一些缓存相关的问题。

如何缓存数据

接下来部将从缓存过期、维度化缓存、增量缓存、大Value缓存、热点缓存几个方面来详细介绍如何缓存数据。

过期与不过期

对于缓存的数据我们可以考虑不过期缓存和带过期时间缓存,什么场景应该选择哪种模式需要根据业务和数据量等因素来决定。

不过期缓存场景一般思路如图2所示:

图2不过期缓存方案

使用Cache-Aside模式,首先写数据库,如果成功,则写缓存。这种场景下存在事务成功、缓存写失败但无法回滚事务的情况。另外,不要把写缓存放在事务中,尤其写分布式缓存,因为网络抖动可能导致写缓存响应时间很慢,引起数据库事务阻塞。如果对缓存数据一致性要求不是那么高,数据量也不是很大,则可以考虑定期全量同步缓存。

也有提到如下思路:先删缓存,然后执行数据库事务;不过这种操作对于如商品这种查询非常频繁的业务不适用,因为在你删缓存的同时,已经有另一个系统来读缓存了,此时事务还没有提交。当然对于如用户维度的业务是可以考虑的。

不过为了更好地解决以上多个事务的问题,可以考虑使用订阅数据库日志的架构,如使用canal订阅mysql的binlog实现缓存同步。

对于长尾访问的数据、大多数数据访问频率都很高的场景、缓存空间足够都可以考虑不过期缓存,比如用户、分类、商品、价格、订单等,当缓存满了可以考虑LRU机制驱逐老的缓存数据。

1. 过期缓存机制

即采用懒加载,一般用于缓存别的系统的数据(无法订阅变更消息、或者成本很高)、缓存空间有限、低频热点缓存等场景;常见步骤是:首先读取缓存如果不命中则查询数据,然后异步写入缓存并过期缓存,设置过期时间,下次读取将命中缓存。热点数据经常使用即在应用系统上缓存比较短的时间。这种缓存可能存在一段时间的数据不一致情况,需要根据场景来决定如何设置过期时间。如库存数据可以在前端应用上缓存几秒钟,短时间的不一致时可以忍受的。

2. 维度化缓存与增量缓存

对于电商系统,一个商品可能拆成如基础属性、图片列表、上下架、规格参数、商品介绍等;如果商品变更了要把这些数据都更新一遍那么整个更新成本很高:接口调用量和带宽;因此最好将数据进行维度化并增量更新(只更新变的部分)。尤其如上下架这种只是一个状态变更,但是每天频繁调用的,维度化后能减少服务很大的压力。

图3 维度化缓存方案

按照不同维度接收MQ进行更新。

3. 大Value 缓存

要警惕缓存中的大Value,尤其是使用Redis时。遇到这种情况时可以考虑使用多线程实现的缓存,如Memcached,来缓存大Value;或者对Value进行压缩;或者将Value拆分为多个小Value,客户端再进行查询、聚合。

4. 热点缓存

对于那些访问非常频繁的热点缓存,如果每次都去远程缓存系统中获取,可能会因为访问量太大导致远程缓存系统请求过多、负载过高或者带宽过高等问题,最终可能导致缓存响应慢,使客户端请求超时。一种解决方案是通过挂更多的从缓存,客户端通过负载均衡机制读取从缓存系统数据。不过也可以在客户端所在的应用/ 代理层本地存储一份,从而避免访问远程缓存,即使像库存这种数据,在有些应用系统中也可以进行几秒钟的本地缓存,从而降低远程系统的压力。

架构视频学习

分享一些架构学习的视频资料,想要的可以自己去领取。

当然还有更多,这边就不一一列举了,你如果觉得你能全部吃下,也不挡着你要到更多。

视频获取方式:【点击链接免费领取】https://shimo.im/docs/QzafqtfKU4MoODI9/read

最后的话

为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀。而你是不是还在满足于现状且内心在窃喜?“对于程序员来说,如果哪一天开始他停止了学习,那么他的职业生涯便开始宣告消亡。”所以行动起来,学习起来!

网络请求多级分流:客户端缓存 与 域名解析 在用户使用信息系统的过程中,请求从浏览器出发,在域名服务器的指引下找到系统的入口,经过网关、负载均衡器、缓存、服务集群等一系列设施,最后触及到末端存储于数据库服务器中的信息,然后逐级返回到用户的浏览器之中。 现代的企业级或互联网系统,“分流”是必须要考虑的设计,分流所使用手段数量之多、涉及场景之广,可能连它的开发者本身都未必能全部意识到。这其中要经过很多技术部件。作为系统的设计者,我们应该意识到不同的设施、部件在系统中有各自不同的价值。 有一些部件位于客户端或网络的边缘,能够迅速响应用户的请求,避 阅读详情

相关推荐

缓存与应用:多级缓存策略介绍与应用要点

这个概念和缓存雪崩有点类似,但不是大面积的缓存过期失效,而是某个访问频次较高的数据失效了,从而导致这一刻高并发的请求全部穿透到了数据库,从而数据库并发压力较高,响应较慢,也进一步导致数据库异常,影响其他业务。,空数据按理不属于访问频繁较高的数据,所以经过了缓存,但是并没有缓存该空数据,而是直接穿透进入了数据库,虽然数据库查询也是空数据,但是还是需要经过数据库的查询,这种现象就是击穿了缓存直接前往了数据库查询。这里我已经申请了一个,具体信息如下,你可以使用以下云服务配置,由于是免费的,也可以自行去申请试用。

我乐了的博客 1323

缓存之多级缓存

一、客户端缓存 图片,css,js等静态资源文件缓存 二、应用层的静态资源缓存 1、expires是指定具体某个时间点缓存到期,而Cache-Control则代表缓存的有效期是多长时间。设置expires设置过期时间,Cache-Control设置过期时长 2、nginx内容分发 三、服务端的多级缓存 1、进程内缓存 在一个应用中开辟一段内存空间,程序在运行中载入到这块内存中,通过本地内存的低延迟高吞吐来提高程序的访问速度 2、进程外缓存(redis) 3、分布式缓存 ...

weixin_44432032的博客 1770

亿级流量系统优化

时效式清理+数目阈值:防止:短期内,密集查询,导致缓存空间的急剧增大。–自己的完整思路。lru+软引用:保证热数据,最大限度的提高 缓存命中率,p。不建议:仅仅使用 软引用。因为我们失去了对它的控制。目的:提高缓存命中率,节省空间,=》提升性能。在系统中,每增加一个环节,就多一份风险。用是不得已。缓存穿透缓存中没有,数据库也没有。方案:在第一次调用的时候,数据提供方返回一个空值,将空值放到缓存中。缓存雪崩大量缓存突然失效,导致大量的请求,倾泻到数据库上,引起数据库压力骤增。

Chicsdn的博客 923

亿级流量,多级缓存(一)

缓存架构方案 高并发场景: 第一集团:阿里,腾讯,京东===》没有上限,在不断的增张 第二集团:国美,美团,58===》5K 第三集团:瓜子===》2K 还有某时间段高并发的===》12306火车票 其他场景:某公务员考试系统,网上考试,3W人,同一时间交卷 数据一致性的问题: 高==》需要高性能 低==》最终一致性 这么多流量直接打过来,肯定扛不住,所以要削峰 qps==>每秒钟并发量 nginx并发5W Tomcat并发200个 划分域名 qq.com down.qq.com games.qq.c

nmajsjpy的博客 249

54.多级缓存

缓存:在Java中,缓存通常指应用程序中的缓存机制,用于临时存储经常访问的数据,以提高数据访问速度。总的来说,Java中的进程缓存和缓存都是为了提高程序的性能和响应速度而存在的,但它们的作用和实现方式有所不同。而缓存是应用程序中的一种机制,用于缓存经常访问的数据,以减少对数据库或其他数据源的访问次数,提高程序的性能。注意:写好文件后,linux的openResty中的nginx要重新加载,windows中的nginx也要重新加载,否则的话是访问失败(还是原来的样子,没有变化)的。

khmff的博客 1779

缓存维度化方案整合

随着分布式,微服务越来越普遍,对开发的要求也在不断的增加,对架构的要求也提出了越来越多的要求,在那些分布式项目中,经常面临的一个问题就是,高效,解耦,举例来说,当一个小型电商网站越来越大的时候,单体架构必然满足不了日益增长的业务需求,就说当众多的流量一起涌入,你的下单接口怎么能够抗住成千上万的QPS呢

缓存一致性问题解决方案(超全超易懂)

缓存一致性问题

Qgchun. 1万+

STM32G030C8T6 ADC+DMA实战:同时采集外部电压和芯片温度的完整代码流程

本文详细介绍了STM32G030C8T6芯片通过ADC+DMA实现外部电压和芯片内部温度采集的完整流程。从硬件设计到CubeMX配置,再到驱动模块化实现与系统优化,提供了高精度多通道采集系统的实战指南,特别适合嵌入式开发者在工业控制和环境监测项目中应用。

weixin_42653691的博客 467

实战-缓存数据一致+binlog初始+cannel监听+数据迁移,数据一致性架构设计

缓存数据一致+binlog初始+cannel监听+数据迁移,数据一致性架构设计

weixin_46643875的博客 2177

【Cubietruck】Qt5.8.0 x64、x86、armhf三个版本的编译安装

一、       Preparation 以下环境配置支持虚拟机和实体机,但是实体机生产效率会相对高一点,实体机编译Qt的速度是虚拟机两倍以上。 若使用虚拟机,推荐使用VirtualBox,开源免费,尽量不要使用Vmware破解版。   Download List   名称 链接 下载项目 OS https://mirro

beatfan的博客 3658

Plecs仿真进阶:半桥LLC谐振变换器从开环到闭环的实战解析

本文通过Plecs软件,详细解析了半桥LLC谐振变换器从开环模型搭建到闭环控制实现的完整仿真流程。文章深入探讨了谐振参数设置、关键波形解读,并重点分享了基于PI控制器的闭环调试实战经验与参数整定技巧,帮助工程师高效掌握这一高效拓扑的仿真与设计方法。

weixin_29231263的博客 278

缓存同步canal实现(订阅binlog)

对于实体类,Canal会将改变的数据注入Item,如果属性名和数据库字段名不一致,需要用注解标明。重启docker,/mysql/data目录下会出现mysql-bin.000001。查看主库的状态(如果从库字段position小于主库,那么就有新的数据要获取了)当canal监听到binlog发生变化,会通知canal客户端。2、基于canal实现缓存同步。1、基于mq实现缓存同步。

qq_46624276的博客 2398

TeXstudio完整安装配置教程(2025最新版)

至此,你已经完成了TeXstudio的完整安装和配置!现在你可以:✅ 使用TeXstudio编写LaTeX文档✅ 正确编译中英文混排的文档✅ 掌握基本的编辑和配置技巧LaTeX的学习曲线较陡,但一旦掌握,你会发现它在学术写作中的强大之处。建议从简单的文档开始练习,逐步掌握更高级的功能。祝你LaTeX写作顺利!如果有任何问题,欢迎在评论区留言交流。关键词:TeXstudio安装、LaTeX环境配置、中文LaTeX、TeX Live、学术论文写作更新日期:2025年10月。

weixin_51241407的博客 4491

亿级流量多级缓存

无状态:对单次请求的处理,不依赖其他请求。先解决核心的问题,预测未来可能出现的问题。第二次请求依赖第一次请求这就是有状态的。对现有问题有方案,对未来系统有预案。不要过度复杂化系统。

渔阳的博客 405

YOLOv8自定义训练:车牌识别全流程(从标注到推理,附可视化代码)

车牌检测全流程实践指南 摘要:本文详细介绍了基于YOLOv8的车牌检测完整实现方案。针对车牌检测中的三大难点(小目标、多角度、光照变化),提供了从数据准备到模型部署的全流程解决方案。重点包括:1)数据采集与标注规范;2)针对小目标的YOLOv8模型优化配置;3)K-means锚框聚类方法;4)训练参数调优策略。通过实际验证,该方法可获得95%以上的检测准确率,并附有完整的代码实现和可视化工具,便于开发者快速复现应用。 (字数:149字)

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 849

基于 YOLO26 的车辆实时检测与计数系统

本文提出了一种基于YOLO26的车辆实时检测与计数系统。系统采用CSPDarknet53作为主干网络,结合特征金字塔和多尺度预测实现高精度车辆检测。通过DeepSORT算法进行目标跟踪,并统计车辆数量、行驶方向和交通流量。实验表明,该系统在保持实时性能的同时,检测精度达到92.3%,可有效应用于智能交通管理。系统采用Python实现,支持GPU加速,适用于多种交通场景下的车辆监测需求。

一键难忘的博客 907

多级缓存(亿级并发解决方案)

多级缓存(亿级并发的缓存方案),jvm进程缓存,缓存同步策略

m0_67814200的博客 1217

[PCIe5.0] 2.2.7.1 TPH Rules

TPH 机制通过硬件提示优化数据流,适用于高性能计算和存储场景。

系统固件工程师 349

多级缓存

传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,如图:存在下面的问题:•请求要经过Tomcat处理,Tomcat的性能成为整个系统的瓶颈•Redis缓存失效时,会对数据库产生冲击在多级缓存架构中,Nginx内部需要编写本地缓存查询、Redis查询、Tomcat查询的业务逻辑,因此这样的nginx服务不再是一个反向代理服务器,而是一个编写业务的Web服务器了。

厚积薄发 1468

2023年全国职业院校技能大赛“信息安全管理与评估”-真题——赛题题目+答案解析

2023年全国职业院校技能大赛“信息安全管理与评估”-真题——赛题题目+答案解析

君逍遥o 5987

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

多级缓存(一):为什么要用多级缓存

多级缓存的设计需结合业务特点,平衡性能、成本和复杂度。

2401_87596091的博客 756

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

什么是多级缓存

什么是多级缓存

m0_61787196的博客 844

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

亿级流量的多级缓存架构设计:从数据库瓶颈到毫秒级响应

多级缓存架构通过本地缓存(L1)→ 分布式缓存(L2)→ 数据库(L3)逐层过滤读请求,在亿级流量下将数据库 QPS 降低 2-3 个数量级。工程落地的关键在于:Cache-Aside + 延迟双删保障最终一致性、本地缓存短 TTL 兜底广播失效丢失、空值缓存防止穿透、TTL 随机偏移防止雪崩。缓存不是免费的午餐——一致性、内存成本与运维复杂度是必须接受的 Trade-off。多级缓存的设计目标不是完美的一致性,而是在可接受的一致性窗口内最大化系统的吞吐能力。

dicky_zhang3的博客 4725

多级缓存入门

传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,如图:请求要经过Tomcat处理,Tomcat的性能成为整个系统的瓶颈Redis缓存失效时,会对数据库产生冲击浏览器访问静态资源时,优先读取浏览器本地缓存访问非静态资源(ajax查询数据)时,访问服务端请求到达Nginx后,优先读取Nginx本地缓存如果Nginx本地缓存未命中,则去直接查询Redis(不经过Tomcat)如果Redis查询未命中,则查询Tomcat。

Java学不会的博客 1475

如何设计一个多级缓存系统?

在一个高并发的分布式系统中,缓存系统是必不可少的一部分,大多数情况下,我们需要设计一个多级缓存系统到生产中使用,那么如何设计呢?这也是笔者在前一段时间的面试中,被问到的一个问题,虽然当时这道题过了,但是面试结束之后对自己的回答不是很满意,所以,再反复思考之后决定分享下自己的设计思路。欢迎留言批评指正。 首先我们需要明白,什么是一个多级缓存系统,它有什么用。所谓多级缓存系统,就是指在一个系统 的...

不清不慎的博客 3388
上一篇: HashMap实现原理:容量、负载因子、hash与定位都搞定了吗?
下一篇: 全面解析大数据批处理框架Spring Batch,所谓完美解析方案是什么?
我是小泽呀!
博客等级 码龄7年 119粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值