当前位置: 首页 > news >正文

微服务架构 | 多级缓存

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 最佳实践 通用设计概述 通用设计思路如下图 内容分发网络&#xff08;CDN&#xff09; 可以理解为一些服务器的副本&#xff0c;这些副本服务器可以广泛的部署在服务器提供服务的区域内&#xff0c;并存有服务器中的一些数据。 用户访问原始服务器…...

怎么将pom在文件放到src下方

今天在IDEA从git拉取项目的时候&#xff0c;发现pom.xml文件在文件夹src的上方&#xff0c;平时看惯了项目的pom.xml文件在文件夹src的下方&#xff0c;应该怎么去设置呢&#xff1f; 点击设置——>点击Folder Always on Top 即可 参考&#xff1a;http://t.csdnimg.cn/s34…...

浅谈网络爬虫与Web安全

网络爬虫(Web Crawler)&#xff0c;又称网络蜘蛛(Web Spider)或网络机器人(Web Robot)&#xff0c;是一种按照一定的规则自动抓取万维网资源的程序或者脚本&#xff0c;已被广泛应用于互联网领域。搜索引擎使用网络爬虫抓取Web网页、文档甚至图片、音频、视频等资源&#xff0c…...

C++vector的使用方法

文章目录 一、vector的介绍1. 文档链接2. 简要介绍 二、vector的使用1.vector的定义&#xff08;1&#xff09;构造函数&#xff08;2&#xff09;拷贝构造函数&#xff08;2&#xff09;赋值重载 2. vector 增删查改&#xff08;1&#xff09;operator []&#xff08;2&#x…...

视频生成模型Sora的全面解析:从AI绘画、ViT到ViViT、DiT、VDT、NaViT、VideoPoet

视频生成模型Sora的全面解析&#xff1a;从AI绘画、ViT到ViViT、DiT、VDT、NaViT、VideoPoet 真没想到&#xff0c;举例视频生成上一轮的集中爆发才过去三个月&#xff0c;没想OpenAI一出手&#xff0c;该领域又直接变天了自打2.16日OpenAI发布sora以来&#xff0c;不但把同时…...

4.1k star,官方出品的redis桌面管理工具——redislnsight

导航 令人抓狂的大key加载RedisInsight 简介RedisInsight的亮点GitHub 地址安装和使用RedisInsight 下载安装 使用RedisInsight redis数据库可视化直观的CLI&#xff08;Command-Line Interface&#xff09;日志分析和命令分析 结语参考 令人抓狂的大key加载 工欲善其事必先利…...

论文目录3:大模型时代(2023+)

1 instruction tuning & in context learning 论文名称来源主要内容Finetuned Language Models Are Zero-Shot Learners2021 机器学习笔记&#xff1a;李宏毅ChatGPT Finetune VS Prompt_UQI-LIUWJ的博客-CSDN博客 早期做instruction tuning的work MetaICL: Learning to …...

FPGA IBUFG

IBUFG和IBUFGDS的输入端仅仅与芯片的专用全局时钟输入管脚有物理连接&#xff0c;与普通IO和其它内部CLB等没有物理连接。 所以&#xff0c;IBUFG输入的不能直接接另外信号。 GTH transceiver primitives are called GTHE3_COMMON and GTHE3_CHANNEL in UltraScale FPGAs, an…...

探索数据结构:单链表的实战指南

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty‘s blog 前言 在上一章节中我们讲解了数据结构中的顺序表&#xff0c;知道了顺序…...

短视频矩阵系统----矩阵系统源码搭建(技术门槛?)

短视频矩阵是什么意思&#xff1f;短视频矩阵的含义可以理解为全方位的短视频账号&#xff0c;通过不同的账号实现全方位的品牌展示。实际上是指一个短视频账号&#xff0c;通过不同的链接实现品牌展示&#xff0c;在不同的粉丝流量账号中互相转发同一个品牌&#xff0c;在主账…...

Spring事务注解@Transactional的流程和源码分析

Spring事务简介 Spring事务有两种方式&#xff1a; 编程式事务&#xff1a;编程式事务通常使用编程式事务管理API实现&#xff0c;比如Spring提供的PlatformTransactionManager接口&#xff0c;使用它手工编码去操控事务。声明式事务&#xff1a;注解式事务使用AOP&#xff0…...

在别的地方下载的二次封装Windows镜像怎么安装?GHO镜像详细安装教程

前言 在系统之家或者其他地方下载的镜像文件怎么装到电脑上&#xff1f; 首先要知道系统之家下载的Windows镜像文件基本上都是.iso结尾的&#xff0c;要进入到对应镜像包才能看出系统镜像是什么格式。 如何分辨镜像的格式 选择对应的.iso镜像&#xff0c;点击【鼠标右键】-【装…...

使用Lerna + Yarn Workspace管理Monorepo项目

1.前言 通常&#xff0c;我们会根据自身业务的实际情况&#xff0c;将通用的组件、逻辑等提取成NPM包&#xff0c;方便以后复用。但这些提取出来的NPM包可能互相之间存在依赖&#xff0c;如果仍然采用 Multirepo 的形式进行管理&#xff0c;则在包的版本管理、依赖管理、调试等…...

如何将gzip后缀压缩包重命名任意后缀名并依然通过gzip.open()读取压缩包文件内容

在 Python 中&#xff0c;gzip.open() 用于解压缩 .gz 后缀的文件。因此&#xff0c;如果您将文件的后缀从 .gz 更改为其他后缀&#xff0c;例如 .diy&#xff0c;然后尝试使用 gzip.open() 打开它&#xff0c;会导致失败&#xff0c;因为 Python 会尝试使用 gzip 解压缩它&…...

C语言从入门到精通 第十一章(文件操作)

写在前面&#xff1a; 本系列专栏主要介绍C语言的相关知识&#xff0c;思路以下面的参考链接教程为主&#xff0c;大部分笔记也出自该教程。除了参考下面的链接教程以外&#xff0c;笔者还参考了其它的一些C语言教材&#xff0c;笔者认为重要的部分大多都会用粗体标注&#xf…...

安装安卓studio无法下载sdk解决方法

安装安卓studio无法下载sdk的解决方法如下&#xff1a; 因为google被墙了&#xff0c;android sdk无法下载。 只要修改host文件&#xff0c;就可以下载sdk了。host文件的位置在&#xff1a;C:\Windows\System32\drivers\etc\hosts host文件添加如下内容&#xff1a; #google_…...

express+mysql+vue,从零搭建一个商城管理系统10--添加商品

提示&#xff1a;学习express&#xff0c;搭建管理系统 文章目录 前言一、新建models/goods.js二、新建routes/goods.js三、添加goods表四、添加商品总结 前言 需求&#xff1a;主要学习express&#xff0c;所以先写service部分 一、新建models/goods.js models/goods.js con…...

java实现大文件的分割与合并

最近遇到一个问题&#xff0c;某网盘上传文件时&#xff0c;文件大小超过了4个G &#xff0c;不能上传&#xff0c;所以就想到了利用的java的IO流&#xff0c;将文件分割成多个小文件&#xff0c;上传到网盘上&#xff0c;等到需要用的时候&#xff0c;下载下来然后再进行文件的…...

【计网】TCP协议安全与风险:深入探讨网络通信的基石

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Linux ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 &#x1f310;前言 &#x1f512;正文 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应用程序的主要分发渠道&#xff0c;上架应用程序需要遵守规定和通…...

深入电机‘内心’:拆解FOC无感算法中的BEMF与磁链观测器(从公式到代码)

深入电机‘内心’&#xff1a;拆解FOC无感算法中的BEMF与磁链观测器&#xff08;从公式到代码&#xff09; 当电机控制工程师第一次接触无感FOC算法时&#xff0c;往往会被各种观测器模型弄得晕头转向。为什么磁链能反映转子位置&#xff1f;电压模型和电流模型究竟孰优孰劣&am…...

别再用Docker镜像打包Dify客户端了!C# 14原生AOT单文件部署正在重构云原生交付范式(限时开放压测数据集)

第一章&#xff1a;Dify客户端云原生交付范式的演进与重构动因在AI应用规模化落地的背景下&#xff0c;Dify客户端从单体打包部署逐步转向以Kubernetes为核心的云原生交付体系。这一转变并非单纯的技术升级&#xff0c;而是应对多租户隔离、边缘协同推理、热插拔插件治理及跨云…...

从Modem到DTU:一个老电工的工业物联网设备选型避坑实录

从Modem到DTU&#xff1a;一个老电工的工业物联网设备选型避坑实录 记得去年夏天&#xff0c;厂里那条老生产线突然闹起了"罢工"。PLC控制柜里那台服役十年的无线Modem开始频繁掉线&#xff0c;每次故障都得爬上三米高的钢架桥检查设备。作为干了二十年的老电工&…...

从兔子生崽到斐波那契:用C语言和Python两种思路搞定经典算法题

从兔子生崽到斐波那契&#xff1a;用C语言和Python两种思路搞定经典算法题 斐波那契数列这个看似简单的数学概念&#xff0c;却能在编程面试、算法竞赛甚至自然界中频繁出现。今天我们不只讲一种解法&#xff0c;而是带你用C语言和Python两种截然不同的思维方式来攻克它。你会发…...

免费开源在线PPT制作工具:浏览器中打造专业演示文稿的终极指南

免费开源在线PPT制作工具&#xff1a;浏览器中打造专业演示文稿的终极指南 【免费下载链接】PPTist PowerPoint-ist&#xff08;/pauəpɔintist/&#xff09;, An online presentation application that replicates most of the commonly used features of MS PowerPoint, all…...

IDM 试用期重置方案:技术解析与自动化实现

IDM 试用期重置方案&#xff1a;技术解析与自动化实现 【免费下载链接】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函数避坑指南)

从刷题到实战&#xff1a;C/C进制转换全攻略与避坑指南 引言&#xff1a;为什么进制转换如此重要&#xff1f; 记得第一次参加技术面试时&#xff0c;面试官抛出一道看似简单的题目&#xff1a;"如何将十六进制的颜色代码转换为RGB值&#xff1f;"当时手忙脚乱的样子…...

别再手动重启了!用Systemd守护你的Sentinel控制台(Linux Ubuntu/CentOS保姆级配置)

别再手动重启了&#xff01;用Systemd守护你的Sentinel控制台&#xff08;Linux Ubuntu/CentOS保姆级配置&#xff09; 在分布式系统的世界里&#xff0c;服务的稳定性往往决定了业务的连续性。想象一下凌晨三点被报警叫醒&#xff0c;发现核心流量管控系统因为一个简单的进程崩…...

告别U盘拷贝!一根网线搞定开发板文件传输:Ubuntu 22.04下TFTP服务器保姆级搭建与避坑指南

嵌入式开发者的文件传输革命&#xff1a;Ubuntu 22.04下TFTP服务器深度配置指南 在嵌入式开发的世界里&#xff0c;时间就是生命线。当你在调试一个需要反复修改的程序时&#xff0c;每次都要拔下U盘、拷贝文件、再插回开发板的繁琐流程&#xff0c;不仅打断了你的思路&#xf…...

从零开始:NSC_BUILDER让你的Switch游戏管理事半功倍

从零开始&#xff1a;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…...