用redis广播消息更新集群环境下本地缓存

前言

在软件系统开发中,有时需要将系统元数据放在数据库中,使用时再从数据库中查询。为避免频繁访问数据库,提升系统性能,需要将更新不频繁的数据放到本地缓存中。在元数据变动的时候再更新本地缓存。如果单节点时不存在问题,但如果是在集群环境下,就需要同步更新中所有节点的本地缓存。如何做到多节点缓存同步呢,可使用redis消息队列广播功能,使用Redis订阅一个主题,注册监听,当有数据变更的时候往这个主题发布一个消息,集群中的各个节点都会收到这个消息执行本地缓存的更新操作。

一、订阅主题,注册监听

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

    @BeanRedisMessageListenerContainer container(RedisConnectionFactory connectionFactory, UpdateMetaListener listener,HotDataConsumer consumer,HotDataDisabledConsumer disabledConsumer) {RedisMessageListenerContainer container = new RedisMessageListenerContainer();container.setConnectionFactory(connectionFactory);if(cluster){//集群部署元数据缓存同步队列container.addMessageListener((message, pattern) ->listener.processMsg(new String(message.getBody())), new PatternTopic(DsConstant.QUEUE_BROADCAST_META));}log.info("RedisMessageListenerContainer create");return container;}
@Component
@Slf4j
public class UpdateMetaListener {@Autowiredprivate UpdateMetaCacheService metaCacheService;/*** 消费broadcastMeta 队列数据* @param msg*/public void processMsg(String msg){JSONObject json=JSONObject.parseObject(msg);String operator=json.getString("operator");String serviceId=json.getString("id");if("removeServiceCache".equals(operator)){removeServiceCache(serviceId);}if("removeDatasourceCache".equals(operator)){removeDatasourceCache(serviceId);}if("addDatasourceCache".equals(operator)){addDatasourceCache(serviceId);}}public void removeServiceCache(String serviceId) {ServiceMetaVo serviceMetaVo=metaCacheService.removeServiceMetaVo(serviceId);}public void removeDatasourceCache(String dsId) {metaCacheService.removeDataSource(dsId);}public void addDatasourceCache(String dsId) {metaCacheService.addDataSource(dsId);}
}

二、发布消息

该处使用的url网络请求的数据。

    public void sendMessage(@PathVariable("serviceId") String serviceId) {JSONObject jsonObject=new JSONObject();jsonObject.put("operator","removeServiceCache");jsonObject.put("id",serviceId);redisTemplate.convertAndSend(DsConstant.QUEUE_BROADCAST_META,jsonObject.toJSONString());}

三、更新缓存


        if("removeServiceCache".equals(operator)){removeServiceCache(serviceId);}if("removeDatasourceCache".equals(operator)){removeDatasourceCache(serviceId);}if("addDatasourceCache".equals(operator)){addDatasourceCache(serviceId);}

总结

也可以使用其它消息队列来实现,具体代码请访问
具体代码下载地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/600253.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

unity中 canvas下物体的朝向跟随

public Transform target; private Vector3 direction; void Update() { //第一种 //direction target.position - transform.position; //transform.up -direction.normalized; //第二种 if (target ! null ) { …

obs-studio build

源码下载: git clone --recursive https://github.com/obsproject/obs-studio.git 提交点:4176f9b13aa9278dbc6c0b0c366f7f7b9ef8c68c git submodule update --init --recursive 下载依赖项: windows Releases obsproject/obs-deps…

【数值分析】非线性方程求根,二分法,割线法,matlab实现

1. 基本问题 收敛阶 lim ⁡ k → ∞ ∣ e k 1 ∣ ∣ e k ∣ r C > 0 , r 为收敛阶 \lim_{k\to\infty} \frac{|e_{k1}|}{|e_k|}^rC>0 \,\,,\,\, r为收敛阶 k→∞lim​∣ek​∣∣ek1​∣​rC>0,r为收敛阶 2. 二分法 二分法是线性收敛的,如果指定精度 …

Spring Data JPA入门到放弃

参考文档:SpringData JPA:一文带你搞懂 - 知乎 (zhihu.com) 一、 前言 1.1 概述 Java持久化技术是Java开发中的重要组成部分,它主要用于将对象数据持久化到数据库中,以及从数据库中查询和恢复对象数据。在Java持久化技术领域&a…

docker-compose常用命令及.yaml配置模板

1、docker-compose常用命令: docker-compose -f mysql-docker-compose.yaml up -d docker-compose -f mysql-docker-compose.yaml downdocker-compose的常用命令包括: docker-compose up:启动并运行Compose文件中的服务。 docker-compose st…

英飞凌TC3xx之一起认识GTM(九)GTM相关知识简述(CMU,CCM,TBU,MON)

英飞凌TC3xx之一起认识GTM(九)GTM相关知识简述(CMU,CCM,TBU,MON) 1 时钟管理单元(CMU)2 集群配置模块(CCM)3 时基单元(TBU)4 监控单元(MON)5 总结由前文的各篇内容,开发者已经知道如何使用GTM的大部分功能,在这些功能中,都需要一个信息就是fGTM 的数据,我们在前…

Vue2和Vue3框架介绍以及使用

Vue2和Vue3框架介绍: Vue2是Vue.js的早期版本,它引入了组件化的开发方式,使得开发人员可以更加模块化地构建单页应用程序。Vue2还提供了响应式的数据绑定和指令,使得开发人员可以更加高效地开发动态的Web界面。 Vue2的特点&…

【源码预备】Calcite基础知识与概念:关系代数概念、查询优化、sql关键字执行顺序以及calcite基础概念

文章目录 一. 关系代数的基本知识二. 查询优化三. SQL语句的解析顺序1. FROM2. WHERE3. GROUP BY4. HAVING5. SELECT 四. Apache Calcite中的基本概念1. Adapter2. Calcite中的关系表达式2.1. 关系表达式例子2.2. 源码底层结构 3. Calcite的优化规则4. Calcite的Trait--算子物理…

使用群晖docker将小爱音箱接入chatgpt

文章目录 开源项目地址获取设备did,设备hardware配置文件分享上传配置文件群晖后台启动服务检查服务状态,测试 开源项目地址 获取设备did,设备hardware 使用Yonsm/MiService项目获取did和hardware。 找个Ubuntu环境安装python环境&#xff…

音乐制作软件Studio One mac有哪些特点

Studio One mac是一款专业的音乐制作软件,该软件提供了全面的音频编辑和混音功能,包括录制、编曲、合成、采样等多种工具,可用于制作各种类型的音乐,如流行音乐、电子音乐、摇滚乐等。 Studio One mac软件特点 1. 直观易用的界面&…

Golang switch 语句

简介 switch 语句提供了一种简洁的方式来执行多路分支选择 基本使用 基本语法如下: switch expression { case value1:// 当 expression 的值等于 value1 时执行 case value2:// 当 expression 的值等于 value2 switch 的每个分支自动提供了隐式的 break&#x…

x-cmd pkg | pdfcpu - 强大的 PDF 处理工具

目录 简介首次用户多功能支持性能表现安全的加密处理进一步阅读 简介 pdfcpu 是一个用 Go 编写的 PDF 处理库。同时它也提供 API 和 CLI。pdfcpu 提供了丰富的 PDF 操作功能,用户还能自己编写配置文件,用来管理和使用各种自定义字体并存储有效的默认配置…

苹果紧急修复两大零日漏洞,影响iPhone、iPad 和 Mac 设备

内容概述: 近日,苹果公司发布紧急安全更新,此次更新修复了两个在攻击中被利用并影响 iPhone、iPad 和 Mac 设备的零日漏洞。据统计,自今年年初以来已修复的零日漏洞数量已达到 20 个。其中提到此次发现的零日漏洞很可能已被iOS 1…

uniapp 【专题详解 -- 时间】云数据库时间类型设计,时间生成、时间格式化渲染(uni-dateformat 组件的使用)

云数据表的时间类型设计 推荐使用时间戳 timestamp "createTime": {"bsonType": "timestamp","label": "创建时间:" }时间生成 获取当前时间 Date.now() .add({createTime: Date.now() })时间格式化渲染 下载安…

音量控制软件sound control mac功能亮点

sound control mac可以帮助用户控制某个独立应用程序的音量,通过每应用音量,均衡器,平衡和音频路由独立控制每个应用的音频,还有整个系统的音量。 sound control mac功能亮点 每个应用程序的音量控制 独立控制应用的数量。 键盘音…

发票信息提取v1.2.0

程序介绍 “发票信息提取”是一款用于提取电子发票的PDF、XML文件中的开票信息到excel表格的软件,无需联网及进行复杂配置,打开即用。目前支持增值税电子发票(非数电票)原始PDF文件,及数电票的XML文件。 更新内容 增加…

PHP运行环境之宝塔Web站点部署

目录 Web站点部署流程(部署聚合支付后台) 项目文件 将上传的文件解压文件至根目录 修改站点关键信息 设置伪静态,选择:thinkphp,并保存 设置PHP,选择:70+版本即可。 安装网站 1设置运行目录

RMAN-03002 RMAN-06059 ORA-19625

有个现场经理反馈,每天的rman备份异常,登录系统查看rman的log日志,报错信息如下 RMAN> run{ 2> backup filesperset 50 archivelog all format /backup/ARCHBAK_%d_%T_%s tag arch_bak delete all input; 3> } 4> Starting …

用于查询性能预测的计划结构深度神经网络模型--大数据计算基础大作业

用于查询性能预测的计划结构深度神经网络模型 论文阅读和复现 24.【X1.1】 在关系数据库查询优化领域,对查询时间的估计准确性直接决定了查询优化结果,进而影响到数据库整体的查询效率。但由于数据库自身的复杂性,查询时间受到数据分布、数据…

SwiftUI之深入解析如何使用accessibilityChartDescriptor视图修饰符为视图构建音频图表

一、DataPoint 结构体 在 SwiftUI 中构建一个简单的条形图视图开始,该视图使用垂直条形显示一组数据点。如下所示,有一个 DataPoint 结构,用于描述条形图视图中的条形,它具有 id、标签、数值和填充颜色: struct Data…