etl engine 实现 redis与mysql之间的数据同步

5天前 13.9k 0

etl engine 实现 redis与mysql之间的数据同步

Redis是一个开源的使用C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,
因其读取速度快、也可用于消息队列使用等场景,已经成为项目中不可缺少的一部分。
本案例是通过etl engine实现redis与mysql之间的数据同步。

需求

读redis写mysql; 读mysql写redis

前置条件

事先准备一个可读写redis服务器;一个可读写mysql服务器;
读redis的key写到mysql的t_redis_info表;读mysql的t_redis_info表记录写到redis

  • MySQL模拟数据


CREATE TABLE t_redis_info (
id VARCHAR(32) NOT NULL,
caption VARCHAR(50),
tag VARCHAR(50),
memo VARCHAR(100),
writetime VARCHAR(19),
PRIMARY KEY (id)
);
INSERT INTO t_redis_info(id,caption,tag,memo,writetime) VALUES ('1','herbin_beer_550','啤酒','哈尔滨雪花550ML','2023-01-01 11:12:13');
INSERT INTO t_redis_info(id,caption,tag,memo,writetime) VALUES ('2','qingdao_beer_550','啤酒','青岛纯生550ML','2023-01-02 01:02:03');
INSERT INTO t_redis_info(id,caption,tag,memo,writetime) VALUES ('3','qingdao_beer_330','啤酒','青岛干啤330ML','2023-02-03 01:02:03');
INSERT INTO t_redis_info(id,caption,tag,memo,writetime) VALUES ('4','herbin_beer_330','啤酒','哈尔滨勇闯天涯330ML','2023-02-03 01:02:03');
INSERT INTO t_redis_info(id,caption,tag,memo,writetime) VALUES ('5','budweiser_beer_330','啤酒','美国百威330ML','2023-03-04 01:02:03');
INSERT INTO t_redis_info(id,caption,tag,memo,writetime) VALUES ('6','wahaha_water_600','纯净水','娃哈哈600ML','2023-03-04 01:02:03');
INSERT INTO t_redis_info(id,caption,tag,memo,writetime) VALUES ('7','nongfushanquan_water_600','纯净水','农夫山泉600ML','2023-03-05 01:02:03');

配置模型图

etl engine 实现 redis与mysql之间的数据同步-1

配置文件内容

总结主要配置环节

  1. 配置串行执行任务
    Graph标签中 设置 runMode=“1” ,使下面两个任务流可以按order配置的顺序执行。
  2. 画两个任务流
    两个连接线中order属性分别设置0 和 1,任务执行行先执行order为0的任务,再执行order为1的任务。
    第1个任务流(读mysql -> 写redis)
    第2个任务流(读redis -> 写mysql)
  3. 第1个任务流
  • 读数据表节点设置
    script 属性
    SELECT caption AS k ,CONCAT(id,’’,caption,’’,memo,’_’, tag) AS v FROM t_redis_info;
    caption为redis中的键名称,组合的v为redis中的键值内容.
  • 写redis节点设置
    patternMatchKey=“true”
    outputFields 设置 k;v
    renameOutputFields 设置key;value
    系统默认会为redis的输出数据流生成key和value两个字段的数据结构
  • 创建元数据 METADATA_0 结构是两个字段 key和value
    连接线中order属性设置0 ,元数据选择 METADATA_0
    该元数据用于写redis节点输出数据流时使用。
  1. 第2个任务流
  • 读redis节点设置
    patternMatchKey=“true”
    keys="*"
  • 写数据表节点设置
    script 属性
    INSERT INTO t_redis_info (id,caption,memo,tag,writetime) VALUES(?,?,?,?,?);
    outputFields 设置
    id;caption;memo;tag;writetime
    注意,通过嵌入go脚本来重新处理输入数据流中的各字段,因此outputFields中设置的字段名称要跟脚本中创建的字段名称相符
    renameOutputFields 设置
    id;caption;memo;tag;writetime
    注意outputFields和renameOutputFields字段个数保持一致
  • 嵌入go脚本,增加一个字段名称为id,调用了内置函数生成uuid
    BeforeOut标签中嵌入go脚本,目的是将输入数据流结构转换成目标表中的各字段结构。
  • 创建元数据METADATA_1 结构是5个字段 id,caption,memo,tag,writetime
    连接线中order属性设置1 ,元数据选择 METADATA_1
    该元数据用于写数据表节点输出数据流时使用。

相关文章

最新发布!MySQL 9.0 的向量 (VECTOR) 类型文档更新
国产数据库中级认证HCIP-openGauss经验分享
保障数据完整性与稳定性:数据库一致性
OceanBase 里的 DDL 超时时间
OceanBase v3.1.x 将不再更新版本 | 社区月报2024.6
openGauss Developer Day 2024 | SIG组工作会议亮点回看!

发布评论