相关配置如下:
```
rule:
-
schema: eseap #数据库名称
table: t_user #表名称
#order_by_column: id #排序字段,存量数据同步时不能为空
#column_lower_case:false #列名称转为小写,默认为false
#column_upper_case:false#列名称转为大写,默认为false
column_underscore_to_camel: true #列名称下划线转驼峰,默认为false
# 包含的列,多值逗号分隔,如:id,name,age,area_id 为空时表示包含全部列
#include_columns: ID,USER_NAME,PASSWORD
#exclude_columns: BIRTHDAY,MOBIE # 排除掉的列,多值逗号分隔,如:id,name,age,area_id 默认为空
#column_mappings: CARD_NO=sfz #列名称映射,多个映射关系用逗号分隔,如:USER_NAME=account 表示将字段名USER_NAME映射为account
#default_column_values: source=binlog,area_name=合肥 #默认的列-值,多个用逗号分隔,如:source=binlog,area_name=合肥
#date_formatter: yyyy-MM-dd #date类型格式化, 不填写默认yyyy-MM-dd
#datetime_formatter: yyyy-MM-dd HH:mm:ss #datetime、timestamp类型格式化,不填写默认yyyy-MM-dd HH:mm:ss
#lua_file_path: lua/t_user.lua #lua脚本文件,详见使用手册,当此值不为空时后面的配置除redis_structure其余均无效
#lua_script: #lua 脚本,详见使用手册,当此值不为空时后面的配置均无效
value_encoder: json #值编码,支持json、kv-commas、v-commas;默认为json
#value_formatter: '{{.ID}}|{{.USER_NAME}}|{{.REAL_NAME}}|{{if eq .STATUS 0}}停用{{else}}启用{{end}}'
#redis相关
redis_structure: string # 数据类型。 支持string、hash、list、set、sortedset类型(与redis的数据类型一致)
redis_key_prefix: USER_ #key的前缀
redis_key_column: USER_NAME #使用哪个列的值作为key,不填写默认使用主键
#redis_key_formatter: '{{.ID}}|{{.USER_NAME}}'
#redis_key_value: user #KEY的值(固定值);当redis_structure为hash、list、set、sortedset此值不能为空
#redis_hash_field_prefix: _CARD_ #hash的field前缀,仅redis_structure为hash时起作用
#redis_hash_field_column: Cert_No #使用哪个列的值作为hash的field,仅redis_structure为hash时起作用,不填写默认使用主键
```
其中,
value_encoder表示值编码格式,支持json、kv-commas、v-commas三种格式,不填写默认为json,具体如下表:
<table>
<tr>
<th width="15%">格式</th>
<th width="20%">说明</th>
<th>举例</th>
</tr>
<td>json</td>
<td>json</td>
<td>{"id": "1001","userName": "admin","password": "123456",
"createTime": "2020-07-20 14:29:19"}</td>
</tr>
<tr>
<td>kv-commas</td>
<td>key-value逗号分隔</td>
<td>id=1001,userName=admin,password=123456,createTime=2020-07-20 14:29:19</td>
</tr>
<tr>
<td>v-commas</td>
<td>value逗号分隔</td>
<td>1001,admin,123456,2020-07-20 14:29:19</td>
</tr>
</table>
value_formatter表示值的格式化表达式,具体模板语法参见"表达式模板"章节,当value_formatter不为空时value_encoder无效。
redis_key_formatter表示KEY的格式化表达式,具体模板语法参见"表达式模板"章节。
# **示例**
t_user表,数据如下:
![](images/Redis1.png)
## **同步为string类型**
配置如下:
```
schema: eseap #数据库名称
table: t_user #表名称
column_underscore_to_camel: true #列名称下划线转驼峰,默认为false
value_encoder: json #值编码
redis_structure: string # 数据类型。 支持string、hash、list、set、sortedset类型(与redis的数据类型一致)
redis_key_prefix: USER_ #key的前缀
redis_key_column: USER_NAME #使用哪个列的值作为key,不填写默认使用主键
```
同步到Redis的数据如下:
![](images/Redis2.jpg)
## **同步为hash类型**
配置如下:
```
column_underscore_to_camel: true #列名称下划线转驼峰,默认为false
value_encoder: json #值编码,支持json、kv-commas、v-commas
redis_structure: hash
redis_key_value: user_cache #key的值(固定值);当redis_structure为hash、list、set、sortedset此值不能为空
redis_hash_field_prefix: user_name_ #hash的field前缀,仅redis_structure为hash时起作用
redis_hash_field_column: user_name #使用哪个列的值作为hash的field,仅redis_structure为hash时起作用,不填写默认使用主键
```
同步到Redis的数据如下:
![](images/Redis3.png)
使用规则能将一个table映射成为一个HASH,但如果需要将talbe中的每一行映射成一个HASH,可以使用Lua脚本实现,详请参见后续的示例。
## **同步为list类型**
配置如下:
```
value_formatter: '{{.ID}}|{{.USER_NAME}}' # 值格式化表达式,如:{{.ID}}|{{.USER_NAME}},{{.ID}}表示ID字段的值、{{.USER_NAME}}表示USER_NAME字段的值
redis_structure: list
redis_key_value: user_list #key的值(固定值);当redis_structure为hash、list、set、sortedset此值不能为空
```
同步到Redis的数据如下:
![](images/Redis4.png)
## **同步为Set类型**
配置如下:
```
value_formatter: '{{.ID}}|{{.USER_NAME}}' # 值格式化表达式,如:{{.ID}}|{{.USER_NAME}},{{.ID}}表示ID字段的值、{{.USER_NAME}}表示USER_NAME字段的值
redis_structure: set
redis_key_value: user_set #key的值(固定值);当redis_structure为hash、list、set、sortedset此值不能为空
```
同步到Redis的数据如下:
![](images/Redis5.png)
## **同步为Sorted Set类型**
t_user表,数据如下:
![](images/redis_sort_data.jpg)
配置如下:
```
value_formatter: '{{.ID}}|{{.USER_NAME}}' # 值格式化表达式,如:{{.ID}}|{{.USER_NAME}},{{.ID}}表示ID字段的值、{{.USER_NAME}}表示USER_NAME字段的值
redis_structure: sortedset
redis_key_value: users #key的值(固定值);当redis_structure为hash、list、set、sortedset此值不能为空
redis_sorted_set_score_column: CREATE_TIME #sortedset的score,当数据类型为sortedset时,此项不能为空,此项的值应为数字类型
```
同步到Redis的数据如下:
![](images/Redis7.png)