CloudCanal x Redis 数据同步指令集丰富与细节优化

简述

CloudCanal 前一段时间支持了 Redis 到 Redis 数据迁移同步能力,并支持其双向同步,但是支持的指令种类有限。

随着用户使用,指令支持不全面成为一个比较大的问题,所以最近的版本,我们对此能力,结合用户实际碰到的问题,进行了新一轮优化。

此轮优化的特点是:

  • 增加数据初始化的类型
  • 增加数据同步的指令种类
  • 双向同步策略优化

本文简要介绍以上优化点,并展望该链路未来的研发方向,希望对用户使用有所帮助。

优化点

指令支持范围提升

Redis 到 Redis 数据同步在原先支持 Set、Hset、Del、Hdel、Expire 五种指令的基础上,额外支持了 Sadd、Zadd、LPushRename、Incr、Incrby、Hsetnx、Hmset、Lpush、Rpush、Lset、Zrem、Zremrangebyscore 12 种命令。

数据初始化(FULL SYNC)在原先支持 String、Hash 类型基础上,额外支持 List、Set、ZSet 三种类型。

数据同步指令种类的丰富,以及数据初始化类型多样化,让此链路具备更好的可落地性。

指令优化

对于 List 类型数据初始化,因获取的成员数据默认倒序,CloudCanal 会对其内部成员进行 重新排序,然后使用 RPush 命令将数据统一写入目标端,确保源、目标数据准确。

对于 Expire 指令,数据同步如果直接应用到目标端,会导致目标端数据过期晚于源端,因此 CloudCanal 在处理这类命令时,将 Expire 转换为绝对时间命令 PExpireAt,从而实现源对端 Key 同时过期。

image.png

双向同步防循环优化

优化前,Redis -> Redis 双向同步防循环策略采用 辅助指令进行判定,当收到正常指令,计算 hash 值,构建辅助指令,以反查辅助指令 key 是否存在进行数据过滤。

这种策略存在以下问题:

  • 辅助指令过期时间不好把控
  • 辅助指令会占用内存空间
  • 辅助指令未过期会导致同样的命令失效

而此次优化,总体延用辅助指令策略,但采用 删除辅助指令 判定是否进行数据过滤,虽然会导致性能下降,但能解决上述三个问题,在缓存写入量不大的情况下,效果良好(缓存常用场景读多写少)。

新策略的好处:

  • 无需考虑辅助指令过期问题
  • 能支持大部分指令防循环(Incr、IncrBy等)

image.png

指令解析 / 处理优化

本次优化对于指令解析、处理结构进行进一步重构,单个指令需要实现的逻辑更加清晰、独立,对于新指令添加,更加方便,为后续加快指令集支持打好基础。

演进方向

丰富指令集

CloudCanal 目前支持 17 种 Redis 常用指令,但仍然只是 Redis 指令集冰山一角,后续我们将支持更多 Redis 指令同步(单向 / 双向)。

数据校验和订正

目前 Redis 到 Redis 链路 暂未开通数据校验和订正功能,对于数据迁移同步产品,事后补救和事前防范(同步逻辑的严谨性)同等重要,后续我们将补上这部分能力。

单独全量功能

目前 Redis 到 Redis 链路并没有开通单独的全量迁移能力,而是在增量任务中顺带完成全量迁移(FULL SYNC),对于部分用户,需要针对该链路进行定时备份(周期性全量迁移),此功能是需要的。

总结

本文简要介绍了 CloudCanal 近期对于 Redis 到 Redis 单向和双向同步链路的优化,并展望该链路未来的研发方向,希望能为用户构建在线数据生态和数据应用发挥一定的作用。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

695岛屿最大面积

题目 给定一个 row x col 的二维网格地图 grid ,其中:grid[i][j] 1 表示陆地, grid[i][j] 0 表示水域。 网格中的格子 水平和垂直 方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个…

华为交换机如何同时配置多个端口参数

知识改变命运,技术就是要分享,有问题随时联系,免费答疑,欢迎联系! 华为交换机如何批量配置端口 使用端口组功能可以实现一次配置多个端口,以减少重复配置工作。端口组分为如下两种方式: 永久端口组。如果用户需要多次…

系列三十三、如何将一个springboot jar做成批处理文件

一、将一个springboot jar做成批处理文件 1.1、需求 最近在写【Spring Cloud Alibaba】的系列文章,其中有一个部分是安装Sentinel控制台,使用命令执行完全没有问题,但是命令太长了,每次启动时都要找笔记,然后粘贴到命…

redis报错:Creating Server TCP listening socket 127.0.0.1:6379: bind: No error

Redis启动时报错: Creating Server TCP listening socket 127.0.0.1:6379: bind: No error 这个错误说明已经开启了redis,并且已经占用了端口6379,需要停止redis后再开启。 redis-cli.exeshutdownexitredis-server redis.windows.conf 参考…

面试官:CSS3新增了哪些新特性?

面试官:CSS3新增了哪些新特性? 一、是什么 css,即层叠样式表(Cascading Style Sheets)的简称,是一种标记语言,由浏览器解释执行用来使页面变得更美观 css3是css的最新标准,是向后兼…

用开源大语言模型开发的智能对话机器人初版原型验证

用开源大语言模型开发的智能对话机器人初版原型验证 0. 背景1. 初版检证效果展示2. 验证效果总结 0. 背景 同事要想做一个智能对话机器人,特别的需求有有些几点, 通过预置提示词(包括确认事项),让大语言模型用会话式…

c# 学习笔记 - 枚举

文章目录 1. 枚举1.1 枚举结构梳理1.2 枚举完整代码1.3 枚举知识点补充 2. 迭代两种命名空间接口3. yield语句 1. 枚举 1.1 枚举结构梳理 结构图   上图内容可能依旧不通俗易懂,这里使用最简明的话语告诉大家实现方式. foreach语句就是集合的遍历操作&#xff0c…

Redis 有序集合(sorted set) 命令

目录 1.Redis Zrevrank 命令 - 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序简介语法可用版本: > 2.2.0返回值: 如果成员是有序集 key 的成员,返回成员的排名。 如果成员不是有序集 key 的成员,返回 nil 。 示例 2…

Linux_CentOS_7.9_MySQL_5.7配置数据库服务开机自启动之简易记录

前言: 作为运维保障,都无法准确预估硬件宕机的突发阶段,其生产数据实时在产出,那作为dba数据库服务的其重要性、必要性就突显而出。这里拿虚拟机试验做个配置记录,便于大家学习参考。 # 如出现服务器重启后登入报错无…

Unity组件开发--升降梯

我开发的升降梯由三个部分组成,反正适用于我的需求了,其他人想复用到自己的项目的话,不一定。写的也不是很好,感觉搞的有点复杂啦。完全可以在优化一下,项目赶工期,就先这样吧。能用就行,其他的…

【EI会议征稿通知】第三届智能电网与绿色能源国际学术会议(ICSGGE 2024)

第三届智能电网与绿色能源国际学术会议(ICSGGE 2024) 2024 3rd International Conference on Smart Grid and Green Energy 2024年第三届智能电网与绿色能源国际学术会议(ICSGGE 2024)将于2024年4月19-21日在中国成都举行。会议…

GraphQL和REST API的区别

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情 GraphQL(Graph Query Language)和REST(Representational State Transfer)是两种用于构建和设计API的不同方法。以下…

基于ssm公交车信息管理系统论文

摘 要 当下,正处于信息化的时代,许多行业顺应时代的变化,结合使用计算机技术向数字化、信息化建设迈进。以前相关行业对于公交车信息的管理和控制,采用人工登记的方式保存相关数据,这种以人力为主的管理模式已然落后。…

vue2 element 弹出框拖拽会出现一层阴影问题

问题如图所示&#xff1a; 因增加 draggable 属性导致我弹窗表单清空文本框时&#xff0c;从右向左选中字体会出现拖拽阴影效果 去掉 draggable 即可 <template><div class"sys-jobTrigger-container"><el-dialog:visible.sync"state.isShowD…

上班经常迟到怎么办?

相信上班需要打卡的小伙伴都跟博主一样&#xff0c;经常可能因为迟一两分钟导致打开迟到而懊恼。 那么&#xff0c;如何避免这种问题呢&#xff1f;下面给大家提供一下博主自己试过的方法,效果还挺不错的 时间逆推法&#xff1a; 拿博主举例子&#xff0c;我住处到公司大概是…

react 基于Ant Desgin Upload简单实现导入 导出功能

效果图&#xff1a; 导入&#xff1a; 导出&#xff1a; 导入代码&#xff1a; const propsConfig {name: file,action: importDataExcelApi, //后端接口headers: {authorization: authorization-text,loginUserId: sessionStorage.getItem(userLogin)? JSON.parse(sessio…

C++完成使用map Update数据 二进制数据

1、在LXMysql.h和LXMysql.cpp分别定义和编写关于pin语句的代码 //获取更新数据的sql语句 where语句中用户要包含where 更新std::string GetUpdatesql(XDATA kv, std::string table, std::string where); std::string LXMysql::GetUpdatesql(XDATA kv, std::string table, std…

Spring——Spring基于注解的IOC配置

基于注解的IOC配置 学习基于注解的IOC配置&#xff0c;大家脑海里首先得有一个认知&#xff0c;即注解配置和xml配置要实现的功能都是一样的&#xff0c;都是要降低程序间的耦合。只是配置的形式不一样。 1.创建工程 1.1 pom.xml <?xml version"1.0" encoding…

基于SSM框架和Layui框架的管理系统

计算机毕业设计&#xff1a;打造安全、高效的信息管理系统在这个数字化时代&#xff0c;信息安全和高效管理是至关重要的。为了帮助学校或机构更好地管理和保护信息&#xff0c;我们为您设计了一套功能强大的信息管理系统。该系统利用先进的技术&#xff0c;结合MD5加密&#x…

excel中解决多行文本自动调整行高后打印预览还是显示不全情况

注意&#xff1a;此方法对于多行合并后单元格行高调整不适用&#xff0c;需要手动调整&#xff0c;如大家有简便方法&#xff0c;欢迎评论。 一、调整表格为自动调整行高 1&#xff09;点击此处全选表格 2&#xff09;在第一行序号单元格的下端&#xff0c;鼠标成黑十字时&am…