微服务架构 | 多级缓存
INDEX
- 通用设计概述
- §2 优势
- §3 最佳实践
通用设计概述
通用设计思路如下图

内容分发网络(CDN)
可以理解为一些服务器的副本,这些副本服务器可以广泛的部署在服务器提供服务的区域内,并存有服务器中的一些数据。
用户访问原始服务器时,其中的静态资源(比如banner图片、图标、js脚本、css文件、静态页面等)会由 CDN 分发到距离用户较近的副本服务器上并返回对应内容,加速访问效率
原始请求经过 CDN 后,会自动按请求内容分发至距离合适的副本服务器或原始服务器
OpenResty
OpenResty,附 官网,是一个基于 Nginx + Lua 实现的服务端开发平台。
其目的旨在在合适的情况下跳过服务,直接访问服务对应的资源本身
JVM 进程缓存(caffeine)
服务级缓存(Redis)
数据持久层
§2 优势
- 分担缓存压力
- 进程缓存相对于分布式缓存,节省了网络io的开销,速度更快
- 使用时,可以减少访问redis的频率,从根源上避免缓存的穿透、击穿、雪崩
- 可用性更强,即使进程缓存、分布式缓存之一不可用,也不会导致整体缓存失效,可以争取服务恢复时间
§3 最佳实践
最佳实践
- 使用 caffeine + redis + mysql 搭建二级缓存
- 自定义缓存控制器
CacheManager - 增设监听 redis 失效 key
- 支持断线重连
自定义缓存控制器 & redis 监听
示例代码
//缓存管理器
public class CacheManager{//redisprivate CacheFrontend cf;//香菜连接池private RedisClient rc;//本地缓存private Cache lc;//redis 连接栈StatefulRedisConnection<String,String> connection;//监听 redis 失效 key//连接正常时,通过 lisenter 监听redis事件,当事件为失效时同步清理本地缓存public void check(){if(connection != null && connection.isOpen)return ;try{connection = rc.connect();cf= ClientSideCaching.enable(new CaffeineCacheAccessor(lc),connection,TrackingArgs.Builder.enabled());connection.addListener(msg->{List<Object> content = msg.getContent(StringCodec.UTF8::decodeKey);//日志输出if(msg.getType().equalsIgnoreCase("invalidate")){List<String> keys = (List<String>)content.get(1);keys.forEach(k->lc.invalidate(k));}});}catch(){//略}}
}//本地缓存访问器
//代理 caffeine client,使之实现香菜连接池中 CacheAccessor 接口
public class CaffeineCacheAccessor implements CacheAccessor{private Cache lc;//本地缓存客户端,这里可以是 caffeine//示例方法,其他方法同样public Object get(Object key){return lc.getIfPresent(key);}
}//心跳检测
@Bean
public CommandLimeRunner init(CacheManager cm){return new CommandLineRunner(){public void run(String... args) throws Exception{while(true){cm.check();TimeUnit.SECONDS.sleep(5);}}}
}
相关文章:
微服务架构 | 多级缓存
INDEX 通用设计概述2 优势3 最佳实践 通用设计概述 通用设计思路如下图 内容分发网络(CDN) 可以理解为一些服务器的副本,这些副本服务器可以广泛的部署在服务器提供服务的区域内,并存有服务器中的一些数据。 用户访问原始服务器…...
怎么将pom在文件放到src下方
今天在IDEA从git拉取项目的时候,发现pom.xml文件在文件夹src的上方,平时看惯了项目的pom.xml文件在文件夹src的下方,应该怎么去设置呢? 点击设置——>点击Folder Always on Top 即可 参考:http://t.csdnimg.cn/s34…...
浅谈网络爬虫与Web安全
网络爬虫(Web Crawler),又称网络蜘蛛(Web Spider)或网络机器人(Web Robot),是一种按照一定的规则自动抓取万维网资源的程序或者脚本,已被广泛应用于互联网领域。搜索引擎使用网络爬虫抓取Web网页、文档甚至图片、音频、视频等资源,…...
C++vector的使用方法
文章目录 一、vector的介绍1. 文档链接2. 简要介绍 二、vector的使用1.vector的定义(1)构造函数(2)拷贝构造函数(2)赋值重载 2. vector 增删查改(1)operator [](2&#x…...
视频生成模型Sora的全面解析:从AI绘画、ViT到ViViT、DiT、VDT、NaViT、VideoPoet
视频生成模型Sora的全面解析:从AI绘画、ViT到ViViT、DiT、VDT、NaViT、VideoPoet 真没想到,举例视频生成上一轮的集中爆发才过去三个月,没想OpenAI一出手,该领域又直接变天了自打2.16日OpenAI发布sora以来,不但把同时…...
4.1k star,官方出品的redis桌面管理工具——redislnsight
导航 令人抓狂的大key加载RedisInsight 简介RedisInsight的亮点GitHub 地址安装和使用RedisInsight 下载安装 使用RedisInsight redis数据库可视化直观的CLI(Command-Line Interface)日志分析和命令分析 结语参考 令人抓狂的大key加载 工欲善其事必先利…...
论文目录3:大模型时代(2023+)
1 instruction tuning & in context learning 论文名称来源主要内容Finetuned Language Models Are Zero-Shot Learners2021 机器学习笔记:李宏毅ChatGPT Finetune VS Prompt_UQI-LIUWJ的博客-CSDN博客 早期做instruction tuning的work MetaICL: Learning to …...
FPGA IBUFG
IBUFG和IBUFGDS的输入端仅仅与芯片的专用全局时钟输入管脚有物理连接,与普通IO和其它内部CLB等没有物理连接。 所以,IBUFG输入的不能直接接另外信号。 GTH transceiver primitives are called GTHE3_COMMON and GTHE3_CHANNEL in UltraScale FPGAs, an…...
探索数据结构:单链表的实战指南
✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:数据结构与算法 贝蒂的主页:Betty‘s blog 前言 在上一章节中我们讲解了数据结构中的顺序表,知道了顺序…...
短视频矩阵系统----矩阵系统源码搭建(技术门槛?)
短视频矩阵是什么意思?短视频矩阵的含义可以理解为全方位的短视频账号,通过不同的账号实现全方位的品牌展示。实际上是指一个短视频账号,通过不同的链接实现品牌展示,在不同的粉丝流量账号中互相转发同一个品牌,在主账…...
Spring事务注解@Transactional的流程和源码分析
Spring事务简介 Spring事务有两种方式: 编程式事务:编程式事务通常使用编程式事务管理API实现,比如Spring提供的PlatformTransactionManager接口,使用它手工编码去操控事务。声明式事务:注解式事务使用AOP࿰…...
在别的地方下载的二次封装Windows镜像怎么安装?GHO镜像详细安装教程
前言 在系统之家或者其他地方下载的镜像文件怎么装到电脑上? 首先要知道系统之家下载的Windows镜像文件基本上都是.iso结尾的,要进入到对应镜像包才能看出系统镜像是什么格式。 如何分辨镜像的格式 选择对应的.iso镜像,点击【鼠标右键】-【装…...
使用Lerna + Yarn Workspace管理Monorepo项目
1.前言 通常,我们会根据自身业务的实际情况,将通用的组件、逻辑等提取成NPM包,方便以后复用。但这些提取出来的NPM包可能互相之间存在依赖,如果仍然采用 Multirepo 的形式进行管理,则在包的版本管理、依赖管理、调试等…...
如何将gzip后缀压缩包重命名任意后缀名并依然通过gzip.open()读取压缩包文件内容
在 Python 中,gzip.open() 用于解压缩 .gz 后缀的文件。因此,如果您将文件的后缀从 .gz 更改为其他后缀,例如 .diy,然后尝试使用 gzip.open() 打开它,会导致失败,因为 Python 会尝试使用 gzip 解压缩它&…...
C语言从入门到精通 第十一章(文件操作)
写在前面: 本系列专栏主要介绍C语言的相关知识,思路以下面的参考链接教程为主,大部分笔记也出自该教程。除了参考下面的链接教程以外,笔者还参考了其它的一些C语言教材,笔者认为重要的部分大多都会用粗体标注…...
安装安卓studio无法下载sdk解决方法
安装安卓studio无法下载sdk的解决方法如下: 因为google被墙了,android sdk无法下载。 只要修改host文件,就可以下载sdk了。host文件的位置在:C:\Windows\System32\drivers\etc\hosts host文件添加如下内容: #google_…...
express+mysql+vue,从零搭建一个商城管理系统10--添加商品
提示:学习express,搭建管理系统 文章目录 前言一、新建models/goods.js二、新建routes/goods.js三、添加goods表四、添加商品总结 前言 需求:主要学习express,所以先写service部分 一、新建models/goods.js models/goods.js con…...
java实现大文件的分割与合并
最近遇到一个问题,某网盘上传文件时,文件大小超过了4个G ,不能上传,所以就想到了利用的java的IO流,将文件分割成多个小文件,上传到网盘上,等到需要用的时候,下载下来然后再进行文件的…...
【计网】TCP协议安全与风险:深入探讨网络通信的基石
🍎个人博客:个人主页 🏆个人专栏:Linux ⛳️ 功不唐捐,玉汝于成 目录 🌐前言 🔒正文 TCP (Transmission Control Protocol): UDP (User Datagram Protocol): HTTP (Hypertext Transfer …...
苹果App Store上架工具介绍
文章目录 摘要引言正文1. Xcode2. [appuploder](https://www.applicationloader.net/)3. [克魔助手](https://keymob.com/) 4.[ipa guard](https://www.ipaguard.com/)总结参考资料 摘要 苹果App Store作为iOS应用程序的主要分发渠道,上架应用程序需要遵守规定和通…...
深入电机‘内心’:拆解FOC无感算法中的BEMF与磁链观测器(从公式到代码)
深入电机‘内心’:拆解FOC无感算法中的BEMF与磁链观测器(从公式到代码) 当电机控制工程师第一次接触无感FOC算法时,往往会被各种观测器模型弄得晕头转向。为什么磁链能反映转子位置?电压模型和电流模型究竟孰优孰劣&am…...
别再用Docker镜像打包Dify客户端了!C# 14原生AOT单文件部署正在重构云原生交付范式(限时开放压测数据集)
第一章:Dify客户端云原生交付范式的演进与重构动因在AI应用规模化落地的背景下,Dify客户端从单体打包部署逐步转向以Kubernetes为核心的云原生交付体系。这一转变并非单纯的技术升级,而是应对多租户隔离、边缘协同推理、热插拔插件治理及跨云…...
从Modem到DTU:一个老电工的工业物联网设备选型避坑实录
从Modem到DTU:一个老电工的工业物联网设备选型避坑实录 记得去年夏天,厂里那条老生产线突然闹起了"罢工"。PLC控制柜里那台服役十年的无线Modem开始频繁掉线,每次故障都得爬上三米高的钢架桥检查设备。作为干了二十年的老电工&…...
从兔子生崽到斐波那契:用C语言和Python两种思路搞定经典算法题
从兔子生崽到斐波那契:用C语言和Python两种思路搞定经典算法题 斐波那契数列这个看似简单的数学概念,却能在编程面试、算法竞赛甚至自然界中频繁出现。今天我们不只讲一种解法,而是带你用C语言和Python两种截然不同的思维方式来攻克它。你会发…...
免费开源在线PPT制作工具:浏览器中打造专业演示文稿的终极指南
免费开源在线PPT制作工具:浏览器中打造专业演示文稿的终极指南 【免费下载链接】PPTist PowerPoint-ist(/pauəpɔintist/), An online presentation application that replicates most of the commonly used features of MS PowerPoint, all…...
IDM 试用期重置方案:技术解析与自动化实现
IDM 试用期重置方案:技术解析与自动化实现 【免费下载链接】idm-trial-reset Use IDM forever without cracking 项目地址: https://gitcode.com/gh_mirrors/id/idm-trial-reset 当我们面对下载管理工具 Internet Download Manager (IDM) 试用期结束的提示时…...
从刷题到实战:一文搞懂C/C++进制转换(含itoa、strtol、bitset函数避坑指南)
从刷题到实战:C/C进制转换全攻略与避坑指南 引言:为什么进制转换如此重要? 记得第一次参加技术面试时,面试官抛出一道看似简单的题目:"如何将十六进制的颜色代码转换为RGB值?"当时手忙脚乱的样子…...
别再手动重启了!用Systemd守护你的Sentinel控制台(Linux Ubuntu/CentOS保姆级配置)
别再手动重启了!用Systemd守护你的Sentinel控制台(Linux Ubuntu/CentOS保姆级配置) 在分布式系统的世界里,服务的稳定性往往决定了业务的连续性。想象一下凌晨三点被报警叫醒,发现核心流量管控系统因为一个简单的进程崩…...
告别U盘拷贝!一根网线搞定开发板文件传输:Ubuntu 22.04下TFTP服务器保姆级搭建与避坑指南
嵌入式开发者的文件传输革命:Ubuntu 22.04下TFTP服务器深度配置指南 在嵌入式开发的世界里,时间就是生命线。当你在调试一个需要反复修改的程序时,每次都要拔下U盘、拷贝文件、再插回开发板的繁琐流程,不仅打断了你的思路…...
从零开始:NSC_BUILDER让你的Switch游戏管理事半功倍
从零开始:NSC_BUILDER让你的Switch游戏管理事半功倍 【免费下载链接】NSC_BUILDER Nintendo Switch Cleaner and Builder. A batchfile, python and html script based in hacbuild and Nuts python libraries. Designed initially to erase titlerights encryption…...
