Redis-full-check:终极Redis数据一致性验证工具,3步轻松搞定数据对比!
Redis-full-check是一款由阿里巴巴云数据库NoSQL团队研发的高效Redis数据对比工具,支持从2.x到7.x的所有Redis版本(不支持Redis Modules),通过多轮迭代比较技术确保两个Redis实例的数据完全一致。无论是数据迁移验证、故障排查还是日常监控,它都能为Redis管理员和开发者提供可靠的数据一致性保障。
📌 为什么选择Redis-full-check进行数据验证?
在Redis数据迁移或双活架构中,数据一致性是核心诉求。传统手动比对方式效率低下且易出错,而Redis-full-check通过智能迭代对比算法和SQLite3中间存储技术,实现了低侵入式的高效数据验证,让你轻松掌控Redis数据状态。
✅ 核心优势解析
- 全面兼容:完美支持Standalone、Cluster、Proxy(阿里云/腾讯云集群)等多种部署模式,覆盖Redis 2.x至7.x全版本
- 高效对比:采用多轮迭代收敛策略,首次全量对比后仅针对差异数据进行校验,大幅降低Redis实例负载
- 灵活配置:可自定义QPS限制(默认15000)、并行协程数(1-100)、批处理大小(1-10000)等参数,适应不同性能需求
- 精准定位:将差异数据(键/字段级别)存储于SQLite3数据库,支持生成结构化差异报告,便于问题追溯

Redis-full-check多轮迭代对比流程图,展示数据从抓取到差异收敛的完整过程
🚀 快速上手:3步完成Redis数据对比
1️⃣ 环境准备与安装
# 克隆项目仓库
git clone https://gitcode.com/gh_mirrors/re/RedisFullCheck
cd RedisFullCheck
# 编译可执行文件(需Go环境支持)
./build.sh
# 查看版本信息验证安装
./bin/redis-full-check -v
2️⃣ 核心参数配置指南
| 参数类别 | 关键参数 | 作用说明 |
|---|---|---|
| 数据源配置 | -s host:port / -t host:port | 指定源/目标Redis地址(支持集群地址) |
| 认证信息 | -p password / -a password | 源/目标Redis密码(格式:密码 或 用户名:密码) |
| 对比控制 | --comparetimes 3 | 迭代对比次数(默认3次,建议生产环境使用3-5次确保数据稳定) |
| 性能优化 | -q 10000 --parallel 8 | 设置QPS限制(如10000)和并行协程数(如8),避免影响线上服务 |
| 结果输出 | --result diff.txt --log check.log | 指定差异结果文件和日志文件路径 |
3️⃣ 实战对比命令示例
# 基础对比命令(默认配置)
./bin/redis-full-check \
-s 192.168.1.100:6379 -p sourcePass \
-t 192.168.1.200:6379 -a targetPass \
--log /var/log/redis-check.log
# 高级配置:限制QPS+过滤特定键+生成差异报告
./bin/redis-full-check \
-s 192.168.1.100:6379 \
-t 192.168.1.200:6379 \
-q 8000 --parallel 10 \
-f "user:*|order*" \ # 仅对比user前缀和order相关键
--result /data/redis-diff-$(date +%F).txt
📊 差异结果解读与分析
对比完成后,可通过SQLite3数据库文件(默认result.db)或指定的结果文件查看差异详情。以下是典型的差异分析场景:
键级别差异示例
sqlite3 result.db
sqlite> SELECT key, type, conflict_type, source_len, target_len FROM key;
| key | type | conflict_type | source_len | target_len | |
|---|---|---|---|---|---|
| user:1001 | string | value | 64 | 63 | # 值内容不一致 |
| order:202305 | hash | lack_target | 8 | 0 | # 目标库缺失键 |
字段级别差异示例
sqlite> SELECT key_id, field, conflict_type FROM field;
| key_id | field | conflict_type | |
|---|---|---|---|
| 5 | address | value | # 字段值不一致 |
| 5 | phone | lack_source | # 源库缺失字段 |
💡 最佳实践与性能优化
-
生产环境部署建议
- 选择业务低峰期执行对比任务,设置合理QPS限制(如线上Redis实例QPS的30%)
- 对超过10GB的大实例,建议分批次使用
-f参数进行前缀过滤对比
-
双方向验证方案 为确保数据完全一致,建议执行双向对比:
# 正向对比:源→目标 ./bin/redis-full-check -s src -t dst --result forward.diff # 反向对比:目标→源 ./bin/redis-full-check -s dst -t src --result backward.diff -
配合监控工具使用 通过
--metric参数生成性能指标文件,结合Prometheus等工具监控对比过程:./bin/redis-full-check ... --metric /var/lib/redis/metrics.json
🛠️ 常见问题解决方案
Q:对比过程中Redis实例CPU飙升怎么办?
A:通过-q参数降低QPS限制(如从15000调整至5000),或减少--parallel并行协程数,命令示例:
./bin/redis-full-check ... -q 5000 --parallel 3
Q:如何只对比特定前缀的键?
A:使用-f参数指定过滤列表,支持前缀匹配(*通配符),例如:
./bin/redis-full-check ... -f "session:*|cache*"
Q:生成的差异结果如何导出为CSV?
A:通过SQLite3命令导出:
sqlite3 -header -csv result.db "SELECT * FROM key;" > key_diff.csv
📄 许可证信息
Redis-full-check从2023年4月27日起采用Apache 2.0许可证(版本1.4.10及以上),1.4.10之前版本使用GPLv3许可证。详细条款请参见项目根目录下的LICENSE文件。
无论是Redis集群迁移后的一致性校验,还是双活架构的日常数据巡检,Redis-full-check都能以其高效、精准、低侵入的特性,成为你Redis数据管理的得力助手。立即尝试,让Redis数据一致性验证变得简单高效!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



