?
https://github.com/alibaba/RedisFullCheck/releases
? ? ?redis-full-check是阿里云Redis&MongoDB團隊開源的用于校驗2個redis數據是否一致的工具。
??redis-full-check通過全量對比源端和目的端的redis中的數據的方式來進行數據校驗,其比較方式通過多輪次比較:每次都會抓取源和目的端的數據進行差異化比較,記錄不一致的數據進入下輪對比(記錄在sqlite3 db中)。然后通過多輪比較不斷收斂,減少因數據增量同步導致的源庫和目的庫的數據不一致。最后sqlite中存在的數據就是最終的差異結果。
redis-full-check對比的方向是單向:抓取源庫A的數據,然后檢測是否位于B中,反向不會檢測,也就是說,它檢測的是源庫是否是目的庫的子集。如果希望對比雙向,則需要對比2次,第一次以A為源庫,B為目的庫,第二次以B為源庫,A為目的庫。
redis-full-check判斷不一致的方式主要分為2類:key不一致和value不一致。key不一致??key不一致主要分為以下幾種情況:
value不一致??不同數據類型有不同的對比標準:
??field沖突類型有以下幾種情況(只存在于hash,set,zset,list類型key中):
比較原理??對比模式(
??對比會進行
??對于
|
-s, --source=SOURCE 源redis庫地址(ip:port),如果是集群版,那么需要以分號(;) 分割不同的db,只需要配置主或者從的其中之一。例如: 10.1.1.1:1000;10.2.2.2:2000;10.3.3.3:3000。-p, --sourcepassword=Password 源redis庫密碼--sourceauthtype=AUTH-TYPE 源庫管理權限,開源reids下此參數無用。--sourcedbtype= 源庫的類別,0:db(standalone單節點、主從),1: cluster (集群版),2: 阿里云--sourcedbfilterlist= 源庫需要抓取的邏輯db白名單,以分號(;)分割,例如:0;5;15 表示db0,db5和db15都會被抓取-t, --target=TARGET 目的redis庫地址(ip:port)-a, --targetpassword=Password 目的redis庫密碼--targetauthtype=AUTH-TYPE 目的庫管理權限,開源reids下此參數無用。--targetdbtype= 參考sourcedbtype--targetdbfilterlist= 參考sourcedbfilterlist-d, --db=Sqlite3-DB-FILE 對于差異的key存儲的sqlite3 db的位置,默認result.db--comparetimes=COUNT 比較輪數-m, --comparemode= 比較模式,1表示全量比較,2表示只對比value的長度,3只對比 key是否存在,4全量比較的情況下,忽略大key的比較--id= 用于打metric--jobid= 用于打metric--taskid= 用于打metric-q, --qps= qps限速閾值--interval=Second 每輪之間的時間間隔--batchcount=COUNT 批量聚合的數量--parallel=COUNT 比較的并發協程數,默認5--log=FILE log文件--result=FILE 不一致結果記錄到result文件中,格式:'db diff-type key field'--metric=FILE metric文件--bigkeythreshold=COUNT 大key拆分的閾值,用于comparemode=4-f, --filterlist=FILTER 需要比較的key列表,以分號(;)分割。例 如:"abc*|efg|m*"表示對比'abc', 'abc1', 'efg', 'm', 'mxyz',不對比'efgh', 'p'。-v, --version
? |
?