这还真是个大活,耗费了整整一天的时间。
究其原因根本就是无论AWS托管的Valkey还是社区的Redis.io,都是被魔改过的阉割版,真是无语他妈给无语开门,无语到家了!
说一下详细的过程:
接到这个任务,首先想到的是同步软件redis-Gunyu
https://github.com/mgtv-tech/redis-GunYu
结果是失败,原因很奇葩,因为aws valkey是必须带tls连接的,Gunyu不支持,放弃。
然后找到了redis-shake
https://tair-opensource.github.io/RedisShake
结果还是失败,理由是不支持PSync,用了scan_reader也失败

然后就又想到了万能的ChatGPT和Google的Gemini,分别给了2个python程序,也是失败
原因是不支持Migrate命令,而且valkey是基于redis 7.2改的,而Redis.io是8.0,命令不兼容
走投无路之下想到了rdb-tools,先把valkey做个备份,放到S3桶里
valeky-20250819-0001.rdb
valeky-20250819-0002.rdb
valeky-20250819-0003.rdb
valeky-20250819-0004.rdb
valeky-20250819-0005.rdb
valeky-20250819-config.json
cat valeky-20250819-config.json
{
"valeky-20250819/valeky-20250819-0002.rdb" : {
"Slots" : "0-5496",
"rdbSize" : "5234516"
},
"valeky-20250819/valeky-20250819-0004.rdb" : {
"Slots" : "5497-8375",
"rdbSize" : "4340658"
},
"valeky-20250819/valeky-20250819-0003.rdb" : {
"Slots" : "10082-16383",
"rdbSize" : "5962581"
},
"valeky-20250819/valeky-20250819-0001.rdb" : {
"Slots" : "8376",
"rdbSize" : "2218"
},
"valeky-20250819/valeky-20250819-0005.rdb" : {
"Slots" : "8377-10081",
"rdbSize" : "1540505"
}
}
看起来是5个rdb备份,每个文件对应redis不同的slots
用rdb来解析备份文件,结果失败,因为不认识valkey rdb的版本。
没办法了,又找到了这个软件
https://github.com/HDT3213/rdb
下载后,首先想处理成json文件,然后灌入到redis.io
./rdb-linux-amd64 -c json -o 0001.json valeky-20250819-0001.rdb
失败,因为json文件灌入的时候redis.io又被阉割了,命令不支持
走投无路,走投无路,走投无路啊!!!欲哭无泪,欲哭无泪,欲哭无泪啊!!!
没办法了,用redis-shake把rdb文件逐个灌进去
[rdb_reader]
filepath = "/root/redis/rdbs/valeky-20250819-0001.rdb"
[redis_writer]
cluster = false
address = "redis-22222.c1.ap-southeast-1-1.ec2.redns.redis-cloud.com:22222"
username = "default"
password = "ABCDEFG"
tls = false
执行了5次,就可以了。
后续啊:可以先去下个rdt
https://github.com/leonchen83/redis-rdb-cli/
把5个rdb合成一个,然后再灌入。
./rdt -m ../../valeky-20250819-0001.rdb ../../valeky-20250819-0002.rdb ../../valeky-20250819-0003.rdb ../../valeky-20250819-0004.rdb ../../valeky-20250819-0005.rdb -o all.rdb
真的是累死了。