生活随笔
收集整理的這篇文章主要介紹了
redis-full-check
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
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不一致主要分為以下幾種情況: - lack_target?: key存在于源庫,但不存在于目的庫。
- type: key存在于源庫和目的庫,但是類型不一致。
- value: key存在于源庫和目的庫,且類型一致,但是value不一致。
value不一致 ??不同數據類型有不同的對比標準: ??field沖突類型有以下幾種情況(只存在于hash,set,zset,list類型key中): - lack_source: field存在于源端key,field不存在與目的端key。
- lack_target: field不存在與源端key,field存在于目的端key。
- value: field存在于源端key和目的端key,但是field對應的value不同。
比較原理 ??對比模式(comparemode)有三種可選: - KeyOutline:只對比key值是否相等。
- ValueOutline:只對比value值的長度是否相等。
- FullValue:對比key值、value長度、value值是否相等。
??對比會進行comparetimes輪(默認comparetimes=3)比較: ??對于hash,set,zset,list大key處理采用以下方式: -
- len <= 5192,直接取全量field、value進行比較,使用如下命令:hgetall,smembers,zrange 0 -1 withscores,lrange 0 -1。
- len > 5192,使用hscan,sscan,zscan,lrange分批取field和value。
|
-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
?
總結
以上是生活随笔為你收集整理的redis-full-check的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。