Redis 数据迁移同步:应对大 Key 同步挑战

在企业级的数据同步和迁移场景中,Redis 凭借高性能和灵活的数据结构,常被用于缓存和高频读写场景。随着业务数据的积累,Redis 中不可避免会出现包含大量元素的“大 Key”,如包含几十万条数据的 List、Set 或 Hash 类型。在进行全量同步或迁移时,大 Key 往往成为性能瓶颈甚至故障源。

CloudCanal 作为专业的数据迁移同步工具,不断优化 Redis 同步技术,近期对 Redis 源端链路又完成了一系列优化,包括更多指令支持、数据校验以及 全量大 Key 同步优化。本文重点介绍在大 Key 同步场景下,CloudCanal 的技术优化与性能提升。

大 Key 同步挑战

在高并发、高实时性的业务系统中,Redis 某个 Key 的元素可能高达数十万甚至上百万。一旦执行全量数据同步,容易带来如下问题:

  • 内存占用剧增(OOM):一次性加载整个大 Key 会使任务程序的内存瞬时暴涨,严重时可能引发 OOM。
  • 协议限制超限:Redis 协议对单条命令的参数数量和请求体大小有上限(如 RESP 协议中为 512MB),超出即报错。
  • 对端写入失败:Redis 目标节点在处理过大命令时,可能因资源不足而拒绝执行,导致同步中断。

CloudCanal 同步技术优化

为解决上述问题,CloudCanal 引入了针对大 Key 的延迟加载与分片同步机制,确保在不牺牲一致性前提下,顺利完成 Redis 全量同步。

延迟加载

传统同步方式往往一次性读取整个 Key 内容加载到内存中,CloudCanal 则采取延迟加载策略,即在全量同步过程中,源端 Redis 的数据不会立即加载到内存中,而是通过 分片 的方式逐步加载和处理。这种方式可以 有效减少内存占用,避免程序 OOM 问题。

大 Key 分片同步

CloudCanal 对 Redis 源端链路的核心优化是将大 Key 拆分成多个“小片段”,分片写入目标 Redis。每个片段包含的元素数量可以通过参数灵活控制:

  • 参数名:parseFullEventBatchSize
  • 默认值:1024
  • 类型支持:List、Set、ZSet、Hash

例如,一个包含 50 万元素的 Set,可以被拆成约 490 个片段,每次发送一个 SADD 命令携带 1024 个元素。

分片同步流程

  1. 分片计算:CloudCanal 首先统计大 Key 中的元素总数,并根据设定的参数 parseFullEventBatchSize 将其切分成多个片段。
  2. 片段构造与发送:每个片段被构造成符合 Redis 协议限制的命令,多次发送,最终重建完整 Key 内容。
  3. 顺序与原子性保证:每个片段按顺序写入,确保目标端数据一致性。

实际效果

CloudCanal 测试了优化后的大 Key 同步效果,数据准备如下:

  • 100w 普通大小 Key(包含:String、Set、ZSet、List、Hash)
  • 5w 30 MB 大小 Key(包含:String、Set、ZSet、List、Hash,最大 Key 35 MB左右)

数据同步性能如下:
请添加图片描述

结果显示,CloudCanal 在 Redis 到 Redis 数据同步(包含大 Key 场景)中,基准 RPS 可达到 4-5 K 左右,基本能够满足业务日常同步需求,并确保数据准确。

总结

通过延迟加载与分片同步机制,CloudCanal 有效避免全量同步过程中可能出现的 OOM 问题和协议限制问题,从而提升全量同步的稳定性和可靠性。

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

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

相关文章

视频关键帧提取

🎞️ 视频关键帧提取与特征分析指南 📌 抽帧数量建议 视频时长推荐抽帧数原因短视频(≤15秒)3~5 帧覆盖不同场景即可中长视频(1~3分钟)5~10 帧内容跨度大长视频&#xf…

协作机器人优化自动化工作流程,提升工作效率

无损检测(NDT)是一种检查方法,用于识别材料中的裂纹或缺陷,或者在不损坏材料的情况下确定材料的元素组成。Olympus拥有多种NDT设备,这些设备具有多种多样的测量功能,允许最终用户对各种行业中使用的金属、塑料、陶瓷和复合材料进行…

复用对象Aspose.Words 中 DocumentBuilder 的状态管理解析

doc manager.LoadDocument(filePath) builder.Document doc 是不是builder就自动清空重建了,不需要清理builder Aspose.Words 中 DocumentBuilder 的状态管理解析 在您的代码中,builder.Document doc 这行代码不会自动清空或重建DocumentBuilder的状态。Docume…

(LeetCode 面试经典 150 题 ) 134. 加油站 (贪心)

题目&#xff1a;134. 加油站 思路&#xff1a;贪心&#xff0c;时间复杂度0(n)。 当前点i来到下一个点i1,那么油的变化量是gas[i]-cost[i]。 先统计遍历完所有点后&#xff0c;油的变化量sum。如果sum<0&#xff0c;说明不可能绕行一周&#xff1b;sum>0&#xff0c;说…

Java 线程池总结

一、写在前面 参考阿里开发规约,创建线程池一般用ThreadPoolExecutor 在高并发程序中&#xff0c;频繁创建与销毁线程是一种极其低效且不可控的行为。为了解决这个问题&#xff0c;Java 提供了线程池&#xff08;ThreadPoolExecutor&#xff09;这一强大的并发框架。它不仅提…

【3.3】Pod详解——容器探针部署第一个pod

文章目录 容器探针小知识-控制平面Pod实战声明式模型&命令模式 部署第一个pod编写pod清单文件kubectl命令将清单文件post到api-server验证pod删除pod 容器探针 上面已经讲到容器状态,那么这些容器的状态是怎么检测到的呢?实际上在pod中有三种探针&#xff0c;存活探针(li…

Insar 相位展开真实的数据集的生成与下载(随机矩阵放大,zernike 仿真包裹相位)

1.真实的数据集下载: Delta-X: UAVSAR L1B Interferometric Products, MRD, Louisiana, 2021 | NASA Earthdata 注意下载的时候需要注册登录一下哦 2. 适用于 深度学习训练的数据集 通过网盘分享的文件:InSAR-DLPU.rar 链接: https://pan.baidu.com/s/1CRWAuNYwCHP_iqCeIhf…

C++ 多线程深度解析:掌握并行编程的艺术与实践

在现代软件开发中&#xff0c;多线程&#xff08;multithreading&#xff09;已不再是可选项&#xff0c;而是提升应用程序性能、响应速度和资源利用率的核心技术。随着多核处理器的普及&#xff0c;如何让代码有效地利用这些硬件资源&#xff0c;成为每个 C 开发者必须掌握的技…

(线性代数)矩阵的奇异值Singular Value

矩阵的奇异值是矩阵分析中一个非常重要的概念&#xff0c;尤其是在数值线性代数、数据降维&#xff08;如PCA&#xff09;、图像处理等领域有着广泛应用。奇异值分解&#xff08;SVD, Singular Value Decomposition&#xff09;是一种强大的工具&#xff0c;可以将任意形状的矩…

数据结构复习4

第四章 串 一些面试题 12. 介绍一下KMP算法。★★★ KMP算法是一种高效的字符串匹配算法&#xff0c;用于在一个文本串中查找一个模式串的出现位置。KMP算法通过利用模式串自身的信息&#xff0c;在匹配过程中避免不必要的回溯&#xff0c;从而提高匹配效率。 KMP算法的核心思…

【八股消消乐】消息队列优化—消息有序

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一个正在变秃、变强的文艺倾年。 &#x1f514;本专栏《八股消消乐》旨在记录个人所背的八股文&#xff0c;包括Java/Go开发、Vue开发、系统架构、大模型开发、具身智能、机器学习、深度学习、力扣算法等相关知识点&#xff…

2D写实交互数字人如何重塑服务体验?

在数字化浪潮席卷全球的当下&#xff0c;人机交互模式正经历着前所未有的变革。从早期的文本命令行界面&#xff0c;到图形用户界面&#xff08;GUI&#xff09;的普及&#xff0c;再到如今语音交互、手势识别等多模态交互技术的兴起&#xff0c;我们与机器之间的沟通方式愈发自…

CI/CD GitHub Actions配置流程

腾讯云服务器宝塔FinalShellgithup 1.在云服务器上创建SSH秘钥对&#xff0c;下载秘钥到本地 2.在服务器中绑定秘钥对&#xff08;绑定后&#xff0c;服务器不能将不允许密码登录&#xff09;绑定前先关机服务器&#xff0c;绑定后再开启服务器 3.FinalShell改为公钥登录&am…

液态交互效果网页开发--源自鸿蒙5以及iOS26的灵感

首先先来看看最终展示效果 当鼠标靠近“开始探索”的按钮的时候&#xff0c;按钮放大并有微弱光效 鼠标靠近之前会给视窗添加一层接近背景的朦胧感&#xff0c;当鼠标放在视窗上朦胧感消失 技术不复杂&#xff0c;这个网页主要是使用了以下关键技术&#xff1a; HTML5 语义化标…

PYTHON从入门到实践9-类和实例

# 【1】面向对象编程 class Student(object):# 可以帮属性值绑定到对象上&#xff0c;self相当于JAVA的thisdef __init__(self, name, age):self.name nameself.age agedef speak(self):print(self.name, 说&#xff1a;老师好)if __name__ __main__:new_student1 Student(…

matplotlib 绘制极坐标图

1、功能介绍&#xff1a; 使用了 matplotlib 库来创建一个极坐标图 2、代码部分&#xff1a; import matplotlib.pyplot as plt import numpy as np# 设置中文字体 plt.rcParams[font.sans-serif] [SimHei] # 选择黑体字体&#xff0c;支持中文 plt.rcParams[axes.unicode…

Dask心得与笔记【2】

文章目录 计算参考文献 计算 数组切片如下 import numpy as np import dask.array as dadata np.arange(1000).reshape(10, 100) a da.from_array(data, chunks(5, 20)) print(a[:,0:3])切片结果是前3列 dask.array<getitem, shape(10, 3), dtypeint64, chunksize(5, 3…

数据采集合规安全是品牌控价基石

在品牌控价与数据分析工作中&#xff0c;数据采集是不可或缺的前置环节。当前主流的数据采集方式为爬虫采集&#xff0c;这种依托机器自动化操作的模式&#xff0c;取代了传统人工逐一浏览、复制数据的繁琐流程&#xff0c;大幅提升了效率。采集后的原始数据&#xff0c;会由系…

llm推理赋能action policy的探索

兄弟&#xff0c;你这个问题非常到位&#xff0c;咱分两个问题详细讲透&#xff1a; &#x1f680; (1) HybridVLA怎么引入更好的推理能力赋能Diffusion Action&#xff1f; HybridVLA 目前设计的亮点&#xff1a; Diffusion Token 与 LLM 自回归结合 但推理能力没有被显式结…

spring04-管理bean(创建、注入):基于注解

一、什么是注解&#xff1f; &#xff08;1&#xff09;注解的定义 注解&#xff08;Annotation&#xff09;是 Java 代码中的一种特殊标记&#xff0c;用于在程序运行或编译时提供元信息。 格式&#xff1a; 注解名(属性名属性值, 属性名属性值...)&#xff08;2&#xff…