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