使用Lua腳本可以實現更復雜的數據處理邏輯,go-mysql-transfer支持Lua5.1語法
# **示例**
t_user表,數據如下:

## **示例一**
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的數據如下:


## **示例二,將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的數據如下:

# **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)
- 簡介
- 部署運行
- 高可用集群
- 同步數據到Redis
- Redis配置
- 基于規則同步
- 基于Lua腳本同步
- 同步數據到MongoDB
- MongoDB配置
- 基于規則同步
- 基于Lua腳本同步
- 同步數據到RocketMQ
- RocketMQ配置
- 基于規則同步
- 基于Lua腳本同步
- 同步數據到Kafka
- Kafka配置
- 基于規則同步
- 基于Lua腳本同步
- 同步數據到RabbitMQ
- RabbitMQ配置
- 基于規則同步
- 基于Lua腳本同步
- 同步數據到Elasticsearch
- Elasticsearch配置
- 基于規則同步
- 基于Lua腳本同步
- 全量數據導入
- Lua腳本
- 基礎模塊
- Json模塊
- HttpClient模塊
- DBClient模塊
- 監控
- 性能測試
- 常見問題
- 更新記錄開發計劃