日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

redis-full-check

發布時間:2025/3/8 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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不一致

??不同數據類型有不同的對比標準:

  • string: value不同。
  • hash: 存在field,滿足下面3個條件之一:

    • field存在于源端,但不存在與目的端。
    • field存在于目的端,但不存在與源端。
    • field同時存在于源和目的端,但是value不同。
  • set/zset:與hash類似。
  • list: 與hash類似。

??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)比較:

  • 第一輪,首先找出在源庫上所有的key,然后分別從源庫和目的庫抓取進行比較。
  • 第二輪開始迭代比較,只比較上一輪結束后仍然不一致的key和field。

    • 對于key不一致的情況,包括lack_source?,lack_target?和type,從源庫和目的庫重新取key、value進行比較。
    • value不一致的string,重新比較key:從源和目的取key、value比較。
    • value不一致的hash、set和zset,只重新比較不一致的field,之前已經比較且相同的filed不再比較。這是為了防止對于大key情況下,如果更新頻繁,將會導致校驗永遠不通過的情況。
    • value不一致的list,重新比較key:從源和目的取key、value比較。
  • 每輪之間會停止一定的時間(Interval)。

??對于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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。