Redis 可以通过以下方式实现数据迁移:
- 使用Redis集群(Cluster)中的数据槽迁移功能实现数据迁移:
- Redis 集群中,数据按照槽(slot)来分布在不同的节点。
- 当某个节点的槽数超过集群其他节点的2倍时,集群会自动触发槽迁移,将部分槽移到其他节点。
- 这样可以实现在线扩容,解决数据倾斜和节点过热的问题。
例如:
# 创建4节点集群,node1存储0-5999槽,node2存储6000-12000槽
redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 \
127.0.0.1:7003 127.0.0.1:7004
# 向node1写入大量数据,使其槽数过多
redis-cli -c -p 7001
set key1 value1
set key2 value2
...
# 集群会自动移除3000个槽(6000-8999)从node1移到node2
# 这个过程对客户端透明,可以继续访问key1和key2
- 使用Redis恢复模式(RESTORE)基于RDB文件实现数据迁移:
- 通过SAVE命令或BGSAVE在源Redis节点上生成RDB数据文件。
- 移动这个RDB数据文件到目标Redis节点所在主机。
- 在目标节点上执行RESTORE命令,将RDB文件中的数据导入。
- 这样可以实现dataimport功能,将一个节点的数据迁移到另一个节点。
例如:
# 源节点6379,生成RDB文件dump.rdb
127.0.0.1:6379> SAVE
# 移动dump.rdb到目标节点6380的主机
# 在目标节点6380上执行RESTORE命令
127.0.0.1:6380> RESTORE dump.rdb 0
# 数据被从dump.rdb文件中导入到6380节点