企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
使用Lua脚本可以实现更复杂的数据处理逻辑,go-mysql-transfer支持Lua5.1语法 # **示例** t_user表,数据如下: ![](https://img.kancloud.cn/b7/ae/b7aea55df3a0d071d67a930b1f497314_589x141.png) ## **示例一** Lua脚本: ``` -- t_user_redis.lua local json = require("json") -- 加载json模块 local ops = require("redisOps") --加载redis操作模块 local row = ops.rawRow() --数据库当前变更的一行数据,table类型,key为列名称 local action = ops.rawAction() --当前数据库事件,包括:insert、updare、delete local id = row["ID"] --获取ID列的值 local userName = row["USER_NAME"] --获取USER_NAME列的值 local key = "user_"..id -- 定义key if action == "delete" -- 删除事件 then ops.DEL(key) ops.SREM("user_set",userName) else local password = row["PASSWORD"] --获取USER_NAME列的值 local createTime = row["CREATE_TIME"] --获取CREATE_TIME列的值 local result = {} -- 定义一个table result["id"] = id result["userName"] = userName result["password"] = password result["createTime"] = createTime result["source"] = "binlog" -- 数据来源 local val = json.encode(result) -- 将newTable转为json ops.SET(key,val) -- 对应Redis的SET命令,第一个参数为key(支持string类型),第二个参数为value if action == "update" -- 修改事件 then local oldRow = ops.rawOldRow() --数据库变更之前的数据(修改之前的数据) local oldUserName = oldRow["USER_NAME"] --获取USER_NAME列的值 ops.SREM("user_set",oldUserName) -- 删除旧值 end ops.SADD("user_set",userName) -- 对应Redis的SADD命令,第一个参数为key(支持string类型),第二个参数为value end ``` 引入脚本: ``` rule: - schema: eseap table: t_user lua_file_path: lua/t_user_redis.lua #lua脚本文件 ``` 同步到Redis的数据如下: ![](https://img.kancloud.cn/5c/37/5c373a0ba3618abcff65d93ef85a294b_586x230.png) ![](https://img.kancloud.cn/92/c7/92c70461c93769a531b072bad9a11e64_586x126.png) ## **示例二,将talbe中的一行映射成一个HASH** Lua脚本如下: ``` -- t_user_redis2.lua local ops = require("redisOps") --加载redis操作模块 local row = ops.rawRow() --当前数据库的一行数据,table类型,key为列名称 local action = ops.rawAction() --当前数据库事件,包括:insert、updare、delete if action == "insert" -- 只监听insert事件 then local key = row["USER_NAME"] --获取USER_NAME列的值 local id = row["ID"] --获取ID列的值 local userName = row["USER_NAME"] --获取USER_NAME列的值 local password = row["PASSWORD"] --获取PASSWORD列的值 local createTime = row["CREATE_TIME"] --获取CREATE_TIME列的值 ops.HSET(key,"id",id) -- 对应Redis的HSET命令 ops.HSET(key,"userName",userName) -- 对应Redis的HSET命令 ops.HSET(key,"password",password) -- 对应Redis的HSET命令 ops.HSET(key,"createTime",createTime) -- 对应Redis的HSET命令 end ``` 引入脚本: ``` rule: - schema: eseap table: t_user lua_file_path: lua/t_user_redis2.lua #lua脚本文件 ``` 同步到Redis的数据如下: ![](https://img.kancloud.cn/bf/ca/bfca4ed5d7d5ec56ab305c213cbb0831_587x186.png) # **redisOps模块** redisOps模块提供了操作Redis的方法,如下: 1. SET: Redis字符串命令,设置指定key的值。如:ops.SET(key,val) 2. DEL: Redis字符串命令,删除指定key的值。如:ops.DEL(key) 3. HSET: Redishash命令,设置哈希表key中的字段field的值。如:ops.HSET(key,field,val) 4. HDEL: Redishash命令,设置哈希表key中的字段。如:ops.HDEL(key,field) 5. RPUSH: Redis列表命令,将值插入到列表key的头部。如:ops.RPUSH(key,val) 6. LREM: Redis列表命令,移除列表key的值。如:ops.LREM(key,val) 7. SADD: Redis集合命令,向集合key添加值。如:ops.SADD(key,val) 8. SREM: Redis集合命令,移除集合key的值。如:ops.SREM(key,val) 9. ZADD: Redis有序集合命令,向有序集合key添加值。如:ops.ZADD(key,score,val) 10. ZREM: Redis有序集合命令,移除有序集合key的值。如:ops.ZREM(key,val)