Redis 实例对比工具之 Redis-full-check
mhr18 2024-11-12 11:14 18 浏览 0 评论
Hello 大家好,我是鸭血粉丝,前面一篇文章给大家介绍了 SpringBoot 项目是如何从单机切换接入集群的,没看过的小伙伴可以去看一下SpringBoot 项目接入 Redis 集群 。这篇文章给大家介绍一个 Redis 工具 redis-full-check,主要是用来校验迁移数据过后的准确性,下面我们来看一下。
安装
Redis-full-check 是阿里开源的一个工具,GitHub 地址 https://github.com/alibaba/RedisFullCheck,安装前我们需要找一台 Linux 机器,并且 GLIBC的版本需要高于 2.14,不然使用的时候会提示 /lib64/libc.so.6: version GLIBC_2.14 not found 。下载我们有两种方式,第一种是在本地直接下载,然后上传到服务器上面;另一个是直接在服务器上面执行wget https://github.com/alibaba/RedisFullCheck/releases/download/release-v1.4.8-20200212/redis-full-check-1.4.8.tar.gz进行下载。下载完成过后解压tar xzvf redis-full-check-1.4.8.tar.gz。具体的过程我们如下进行:
- 检查当前服务器的 GLIBC 版本,执行命令strings /lib64/libc.so.6 |grep GLIBC_,如下图,如果出现高于 2.14 的即可,如果没有可以考虑换一台服务器或者自己更新,但是更新有风险请谨慎,具体的更新方法自行百度;
- 下载压缩包,执行:wget https://github.com/alibaba/RedisFullCheck/releases/download/release-v1.4.8-20200212/redis-full-check-1.4.8.tar.gz 下载完成后解压。阿粉这里已经下过了, 就不重复下载了,解压后进入目录,输入./redis-full-check -v 如果能正常看到版本号就说明下载安装成功了。
使用
在使用这个工具之前,你需要的是两台不同的 Redis 实例,阿粉这边因为是从单机切换到集群,所以已经有了。下面就有单机和集群给大家演示。我们执行如下命令:./redis-full-check -s "172.20.xxx.xxx:6379" -p "sourcePassword" --sourcedbfilterlist=0 -t "172.20.xxx.xxx:6379;172.20.yyy.yyy:6379" -a "targetPassword" --targetdbtype=1
说明:
- -s: 表示源 Redis 实例
- p:源 Redis 密码
- --sourcedbfilterlist:匹配指定的 db 库,单集 Redis 是可以设置特定 db 库的,集群环境不行,根据自己的情况决定是否采用;
- -t:目标 Redis,阿粉这边是集群所以会有多个节点,每个节点用分号隔开,另外注意文档上说这里必须填写所有的 master 节点或者所有的 slave 节点,不能混合填写。阿粉这里填的都是 master 节点是成功,但是全部 slave 好像没成功,大家可以自己试试。
- -a:表示目标 Redis 的密码
- --targetdbtype=1:目标 Redis 环境的类型,0:db(standalone单节点、主从),1: cluster(集群版),2: 阿里云
详细的参数如下:
-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
查看结果
执行完上面的命令过后在当前目录下会生成三个文件,分别是result.db.1,result.db.2,result.db.3。我们可以通过 sqlite3 工具进行查询,如下所示:
通过sqlite3 result.db.3 命令进入终端,然后从 key 表中查询我们需要的数据。sqlite3 工具是一个类似 MySQL 的数据库,大家可以自己研究下如何使用,后面有机会阿粉再跟大家分享。
从上面的图中可以发现,这个结果看起来很难受,阿粉再教大家几招,让看起来爽一点!进入终端后我们依次输入下面图中命令
- .header on 打开表头,id 只是序号,key 表示源 Redis 中的 key,type 表示类型,db 表示 key 所在的源 Redis 的 db 库,source_len,和 target_len 分别表示在源 Redis 和目标 Redis 的中 value 的长度。我们可以通过长度来快速查看不同的数据。
- .mode column 设置输出模式
- .widht int int... 设置每列显示的长度,更美观
- .quit 退出终端
通过这个输出结果我们可以明显的看出哪些数据是不一致的,从而对比两个 Redis 实例的数据,需要注意的是 Redis-full-check 对比的是源实例是否是目标实例的子集!
总结
今天阿粉给大家介绍了一个 Redis 实例数据对比的工具,能真正在生产上使用的一个阿里开源的很优秀的工具,希望对大家有帮助!具体的更多使用细节,大家可以自己研究研究,一个好的工具值得好好深入研究。
相关推荐
- Java培训机构,你选对了吗?(java培训机构官网)
-
如今IT行业发展迅速,不仅是大学生,甚至有些在职的员工都想学习java开发,需求量的扩大,薪资必定增长,这也是更多人选择java开发的主要原因。不过对于没有基础的学员来说,java技术不是一两天就能...
- 产品经理MacBook软件清单-20个实用软件
-
三年前开始使用MacBookPro,从此再也不想用Windows电脑了,作为生产工具,MacBook可以说是非常胜任。作为产品经理,值得拥有一台MacBook。MacBook是工作平台,要发挥更大作...
- RAD Studio(Delphi) 本月隆重推出新的版本12.3
-
#在头条记录我的2025#自2024年9月,推出Delphi12.2版本后,本月隆重推出新的版本12.3,RADStudio12.3,包含了Delphi12.3和C++builder12.3最...
- 图解Java垃圾回收机制,写得非常好
-
什么是自动垃圾回收?自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没被使用,并且将后者删掉的机制。所谓使用中的对象(已引用对象),指的是程序中有指针指向的对象;而未使用中的对象(未引用...
- Centos7 初始化硬盘分区、挂载(针对2T以上)添加磁盘到卷
-
1、通过命令fdisk-l查看硬盘信息:#fdisk-l,发现硬盘为/dev/sdb大小4T。2、如果此硬盘以前有过分区,则先对磁盘格式化。命令:mkfs.文件系统格式-f/dev/sdb...
- 半虚拟化如何提高服务器性能(虚拟化 半虚拟化)
-
半虚拟化是一种重新编译客户机操作系统(OS)将其安装在虚拟机(VM)上的一种虚拟化类型,并在主机操作系统(OS)运行的管理程序上运行。与传统的完全虚拟化相比,半虚拟化可以减少开销,并提高系统性能。虚...
- HashMap底层实现原理以及线程安全实现
-
HashMap底层实现原理数据结构:HashMap的底层实现原理主要依赖于数组+链表+红黑树的结构。1、数组:HashMap最底层是一个数组,称为table,它存放着键值对。2、链...
- long和double类型操作的非原子性探究
-
前言“深入java虚拟机”中提到,int等不大于32位的基本类型的操作都是原子操作,但是某些jvm对long和double类型的操作并不是原子操作,这样就会造成错误数据的出现。其实这里的某些jvm是指...
- 数据库DELETE 语句,还保存原有的磁盘空间
-
MySQL和Oracle的DELETE语句与数据存储MySQL的DELETE操作当你在MySQL中执行DELETE语句时:逻辑删除:数据从表中标记为删除,不再可见于查询结果物理...
- 线程池—ThreadPoolExecutor详解(线程池实战)
-
一、ThreadPoolExecutor简介在juc-executors框架概述的章节中,我们已经简要介绍过ThreadPoolExecutor了,通过Executors工厂,用户可以创建自己需要的执...
- navicat如何使用orcale(详细步骤)
-
前言:看过我昨天文章的同鞋都知道最近接手另一个国企项目,数据库用的是orcale。实话实说,也有快三年没用过orcale数据库了。这期间问题不断,因为orcale日渐消沉,网上资料也是真真假假,难辨虚...
- 你的程序是不是慢吞吞?GraalVM来帮你飞起来性能提升秘籍大公开
-
各位IT圈内外的朋友们,大家好!我是你们的老朋友,头条上的IT技术博主。不知道你们有没有这样的经历:打开一个软件,半天没反应;点开一个网站,图片刷不出来;或者玩个游戏,卡顿得想砸电脑?是不是特别上火?...
- 大数据正当时,理解这几个术语很重要
-
目前,大数据的流行程度远超于我们的想象,无论是在云计算、物联网还是在人工智能领域都离不开大数据的支撑。那么大数据领域里有哪些基本概念或技术术语呢?今天我们就来聊聊那些避不开的大数据技术术语,梳理并...
- 秒懂列式数据库和行式数据库(列式数据库的特点)
-
行式数据库(Row-Based)数据按行存储,常见的行式数据库有Mysql,DB2,Oracle,Sql-server等;列数据库(Column-Based)数据存储方式按列存储,常见的列数据库有Hb...
- AMD发布ROCm 6.4更新:带来了多项底层改进,但仍不支持RDNA 4
-
AMD宣布,对ROCm软件栈进行了更新,推出了新的迭代版本ROCm6.4。这一新版本里,AMD带来了多项底层改进,包括更新改进了ROCm的用户空间库和AMDKFD内核驱动程序之间的兼容性,使其更容易...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle位图索引 (74)
- oracle批量插入数据 (65)
- oracle事务隔离级别 (59)
- oracle 空为0 (51)
- oracle主从同步 (56)
- oracle 乐观锁 (53)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)