亿级请求下多级缓存那些事

STM32+华为云IoT+Qt跨平台智能家居控制系统 物联网系统中的设备上云与远程控制,本质是边缘感知、云端协同与人机交互的三层闭环。其核心原理在于通过标准化协议(如MQTT)实现设备与云平台的双向可靠通信,并借助设备影子机制保障离线指令的最终一致性;技术价值体现在高确定性执行(STM32实时控制)、企业级连接管理(华为云IoT设备影子/规则引擎)和原生跨平台UI(Qt信号槽解耦设计)三者融合;典型应用场景包括高校物联网毕设、中小企业轻量化智能中控、嵌入式Linux触控终端等对稳定性、低功耗与多OS兼容性有硬性要求的落地项目;本方案聚焦‘可部署、可验证、可演进 阅读详情

这篇文章是我在阿里云社区看到的,原文地址:https://yq.aliyun.com/articles/328515?utm_content=m_38774


什么是多级缓存

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

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

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

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

对于长时访问的数据、大多数访问频率都很高的场景、缓存空间足够都可以考虑不过期缓存,比如:用户、分类、商品、价格、订单等,当缓存满了可以考虑LRU(Least Recently Used,一种缓存淘汰算法)机制驱逐老的缓存数据。

1.过期缓存数据

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

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

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

尤其如上下架这种只有一个状态变更,但是每天频繁调用的,维度化后能减少服务很大的压力。


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

3.大Value缓存

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

4.热点缓存

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

多级缓存(亿级流量缓存) function 函数名(args1,agrs2,agrs3)-- 函数体..return 返回值end。 阅读详情

相关推荐

通达信强龙趋势幅图指标 - 精准捕捉趋势,把握强势行情,多角度分析个股,强弱一目了然

STICKLINE(趋势>0 AND SJTJ,4.8,5.8,1.5,0),COLORYELLOW;STICKLINE(资金>0 AND SJTJ,1.2,2.2,1.5,0),COLOR0080FF;STICKLINE(异动>0 AND SJTJ,0,1,1.5,0),COLORFF0080;STICKLINE(异动=0 AND SJTJ,0,1,1.5,1),COLORGRAY;

Q1809330692的博客 5626

JetCache多级缓存看这篇文章就够了

JetCache是阿里推出的一套替代springcache的缓存方案。JetCache是对SpringCache进行了封装,在原有基础上实现了多级缓存、缓存统计、自动刷新、异步调用、数据报表等功能。JetCache设定了本地缓存与远程缓存的多级缓存方案本地缓存Caffeine远程缓存RedisTair本地缓存和远程缓存可以任意组合jetcache官方源码: https://github.com/alibaba/jetcache。

流浪者的博客 5676

Nginx配置Cookie安全属性:HttpOnly、Secure、SameSite实战指南

Cookie是Web应用中维持用户状态的核心机制,其安全配置直接关系到会话管理与身份认证的可靠性。从原理上讲,HttpOnly属性可防止XSS攻击窃取Cookie,Secure属性确保Cookie仅在HTTPS加密连接中传输,而SameSite属性则用于控制跨站请求时Cookie的发送行为,能有效防御CSRF攻击。这些安全属性的技术价值在于构建纵深防御体系,提升应用的整体安全性。在现代浏览器(如Chrome 80+)默认将未明确声明的Cookie视为SameSite=Lax的背景下,正确配置这些属性变得尤为

weixin_33783283的博客 320

jetcache:阿里这款多级缓存框架一定要掌握

jetcache是阿里开源的基于java开发的缓存框架,支持多种缓存类型:本地缓存、分布式缓存、多级缓存。能够满足不同业务场景的缓存需求。jetcache具有上手简单、性能高效、拓展性强的特点。支持缓存预热 、缓存key前缀等功能。结合spring-cache使用,可以实现十分优雅的缓存类型切换。

55555的博客 4035

告别数据丢失焦虑:用Python手把手实现Reed-Solomon码(附完整代码)

本文详细介绍了如何使用Python实现Reed-Solomon纠错码(RS码),帮助开发者有效防止数据丢失。通过基础编解码实战、文件保护方案和高级性能优化技巧,读者可以轻松掌握这一前向纠错技术,应用于物联网、文件存储和网络传输等场景,提升数据可靠性。

weixin_42527160的博客 222

用LT1166+MOS管打造实验室级恒流源:闭环反馈与推挽驱动的深度调优

本文详细介绍了基于LT1166电流模式控制器与MOS管推挽架构的实验室级恒流源设计方法。通过闭环反馈调优和动态响应优化,实现带宽达100kHz、纹波低于0.1%的高性能恒流输出,适用于精密仪器校准和半导体测试等场景。重点解析了系统架构设计、MOS管选型策略以及频率响应测试等关键技术要点。

weixin_29290379的博客 203

JetCache-Alibaba缓存框架

JetCache 是一个高性能分布式缓存框架,可以为应用程序提供多种缓存模式和缓存管理功能。该框架支持本地缓存和分布式缓存,并提供了一系列缓存注解、缓存管理 API、缓存失效策略等特性来方便应用程序处理缓存数据。与其他缓存框架相比,JetCache 具有更好的性能、更灵活的配置以及更多的特性支持,可适用于各种场景的缓存需求。本篇文章介绍了 JetCache 的背景、设计理念、使用方式、示例等内容,旨在帮助开发者快速上手使用 JetCache 来提升应用程序的性能和可用性。

lzc翻身博客 8840

Lmbench测试集 --- 延迟测试工具lat_mem_rd

lmbench测试集简介 以及 lat_mem_rd延迟测试工具: 如何测试、测试结果、源码分析

MonologueYY的博客 1万+

jetcache-阿里多级缓存框架神器一定要掌握

jetcache-阿里多级缓存框架神器一定要掌握

程序员码小跳 8481

modbus

从机地址 功能码 起始地址高位 起始地址低位 数量高位 数量低位 字节数 0001H高位 0001H低位 0002H高位 0002H低位 CRC高位 CRC低位。每个输入寄存器的长度为2个字节。其中,CDH对应线圈0013H到001AH的内容,01H对应线圈001B到001CH的内容,未使用位用0填充。从机地址 功能码 起始地址高位 起始地址低位 寄存器数量高位 寄存器数量低位 CRC高位 CRC低位。从机地址 功能码 起始地址高位 起始地址低位 寄存器数量高位 寄存器数量低位 CRC高位 CRC低位。

lunhuicnm的博客 9747

点云欧式聚类快速了解

一种基于欧氏距离度量的聚类算法基于KD-Tree的近邻查询算法是加速欧式聚类算法的重要预处理方法KD-Tree是由二分搜索树演变而来的用于大规模高维度数据查找场景当中的索引结构,主要用于最近邻查找和近似最近邻查找。将整个空间划分为二叉树的形式,方便有效找到最近邻点云处理算法库PCL,是比较重要的,在后续会继续学习,然后发出更优质的文章。

xiaobaiwsc的博客 1722

基于JetCache整合实现一级、二级缓存方案(方案实现)

在高并发系统中,为了减少数据库压力,就有了像Redis这种的内存缓存。通过内存缓存能够提高查询速度,但是查询并发量非常的大的场景,频繁的查询Redis,会有明显的网络IO消耗,针对这种查询非常频繁的数据(热点key),我们可以考虑本地进程级缓存,如:Caffeine。当有符合条件的数据时,可以直接查询本地缓存,而不用通过网络到Redis中去获取,这样就形成了两级缓存。本文通过JetCache缓存框架整合Caffeine、Redis缓存,进而实现扩展Hibernate、Mybatis、Spring Cache

qq_25409421的博客 2917

手把手教你用CH340给正点原子ESP8266烧录固件(附串口调试技巧)

本文详细讲解了使用CH340模块为正点原子ESP8266烧录AT固件的完整流程与关键技巧。核心在于烧录时必须使用3.3V供电,并正确连接GPIO0引脚至GND以进入下载模式。文章涵盖了从硬件接线、软件参数配置到烧录后串口调试验证的全步骤,并提供了常见问题排查方案,帮助开发者一次性成功完成固件烧录。

weixin_29201933的博客 232

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

什么是多级缓存 所谓多级缓存,即在整个系统架构的不同系统层级进行数据缓存,以提升访问效率,这也是应用最广的方案之一。我们应用的整体架构如图1所示: 亿级请求下多级缓存那些事,你全部吃下了吗? 图1 多级缓存方案 文末有福利赠送,如果你感兴趣的话可以去领取架构资料。 整体流程如上图所示: 1)首先接入Nginx将请求负载均衡到应用Nginx,此处...

javaMare的博客 270

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

工业扩展串口丢包乱码的五大物理层根源与根治方案

扩展串口是工业现场实现RS232/RS485通信的关键桥梁,其本质是在USB、PCIe或嵌入式平台之上通过协议转换芯片构建的非原生串行接口。由于引入了额外的电平转换、驱动栈、供电路径与接地拓扑,其稳定性高度依赖物理层设计——包括供电裕量、地线环路控制、终端与偏置匹配、电气隔离强度及共模干扰抑制能力。这些因素共同决定了信号完整性与抗扰度,进而影响Modbus RTU等关键协议的帧同步精度与CRC校验可靠性。典型问题如CH340串口驱动异常、RS485总线振铃、Linux静默丢包等,均源于链路层失配而非软件缺陷

weixin_34200628的博客 280

Statistics and Machine Learning Toolbox

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

《深入分布式缓存》之“亿级请求下多级缓存那些事”

所谓多级缓存,即在整个系统架构的不同系统层级进行数据缓存,以提升访问效率,这也是应用最广的方案之一。我们应用的整体架构如图1所示:图1 多级缓存方案整体流程如上图所示:1)首先接入Nginx将请求负载均衡到应用Nginx,此处常用的负载均衡算法是轮询或者一致性哈希,轮询可以使服务器的请求更加均衡,而一致性哈希可以提升应用Nginx的缓存命中率,相对于轮询,一致性哈希会存在单机热点问题,一种解决办法

我相信...... 3473

缓存那些事

从缓存扯到http,又扯到性能优化,就是在扯这些东西吧 从看大公司的前端性能优化到自己项目实战,缓存是一件极其有意思的事情之一(还有正则,函数,再扯就跑题了。。。)。 在此我们先把逻辑流程走一遍。 ETag:  这是啥:请求HEAD中的一个属性',  干啥的:帮助服务器控制Web端的缓存验证',  怎么干的:当浏览器请求服务器的某项资源(A)时, 服务器根据A算出一个值HASH(有人说

xu3tu的博客 238

多级缓存:亿级流量的缓存方案

类似Java的条件控制,例如if、else语法:与java不同,布尔表达式中的逻辑运算是。

m0_71484388的博客 1628

多级缓存——亿级流量的缓存方案(Caffeine、OpenResty、Canal等)

本文探讨了多级缓存架构的设计与实现。传统缓存策略存在Tomcat性能瓶颈和数据库冲击问题,多级缓存方案通过Nginx、Redis和本地缓存的分层设计有效缓解压力。文章详细介绍了基于Caffeine的高性能本地缓存实现,并阐述了如何结合OpenResty实现Nginx层面的缓存处理。通过Redis缓存预热解决冷启动问题,利用Canal实现MySQL与缓存的数据同步,确保数据一致性。最终构建了包含Nginx本地缓存、Redis分布式缓存和Tomcat进程缓存的多级缓存体系,显著提升了系统性能和数据访问效率。

2401_86176995的博客 1327

亿级流量多级缓存

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

渔阳的博客 405

亿级请求下多级缓存

什么是多级缓存 所谓多级缓存,即在整个系统架构的不同系统层级进行数据缓存,以提升访问效率,这也是应用最广的方案之一。 整体流程如上图所示: 1)首先接入Nginx将请求负载均衡到应用Nginx,此处常用的负载均衡算法是轮询或者一致性哈希,轮询可以使服务器的请求更加均衡,而一致性哈希可以提升应用Nginx的缓存命中率,相对于轮询,一致性哈希会存在单机热点问题,一种解决办法是热点直接推送到接...

熙熙小学姐 524
上一篇: maven项目搭建的简单记录及问题解决
Bsarlmls
博客等级 码龄10年 1粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值