Redis数据导⼊导出以及数据迁移的4种⽅法详解
1、aof 导⼊⽅式。
因为这种⽅式⽐较简单,所以我就先介绍它。
linux安装redis服务分两步来实现,第⼀步先让源 Redis ⽣成 AOF 数据⽂件。
# 清空上⽂⽬标实例全部数据
redis-cli -h ⽬标RedisIP -a password flushall
# 源实例开启 aof 功能,将在 dir ⽬录下⽣成 appendonly.aof ⽂件
redis-cli -h 源RedisIP -a password config set appendonly yes
dir ⽬录,可以通过 config get dir ⽬录获得。
config get dir
# ⽐如我的 Mac 上执⾏上⾯的命令后,返回如下内容
1) "dir"
2) "/usr/local/var/db/redis"
通过上⾯的命令,我们可以看到我本地的 dir ⽬录是:/usr/local/var/db/redis。
现在我们来做第⼆步操作,让⽬标 Redis 实例导⼊ aof 数据。
# 将 appendonly.aof ⽂件放在当前路径下
redis-cli -h ⽬标RedisIp -a password --pipe < appendonly.aof
# 源实例关闭 aof 功能
redis-cli -h 源RedisIp -a password config set appendonly no
上⾯的第⼀个命令,执⾏后,如果出现以下内容,则表⽰导⼊ aof 数据成功。
All data transferred. Waiting for the
Last reply received from server.
errors: 0, replies: 5
我这⾥是测试,数据⽐较少,所以提⽰有 5 个导⼊成功了。
AOF 的缺点也很明显,就是速度慢,并且如果内容多的话,⽂件也⽐较⼤。⽽且开启 AOF 后,QPS 会⽐ RDB 模式写的QPS 低。还有就是 AOF 是⼀个定时任务,可能会出现数据丢失的情况。
2、通过我的 xttblog_redis_mv.sh 脚本来实现。
我的脚本内容如下:
#!/bin/bash
#redis 源ip
src_ip=192.168.1.4
#redis 源port
src_port=6379
#redis ⽬的ip
dest_ip=127.0.0.1
#redis ⽬的port
dest_port=6389
#要迁移的key前缀
key_prefix=
i=1
redis-cli -h $src_ip -p $src_port -a password keys "${key_prefix}*" | while read key
do
redis-cli -h $dest_ip -p $dest_port -a password del $key
redis-cli -h $src_ip -p $src_port -a password --raw dump $key | perl -pe 'chomp if eof' | redis-cli -h $dest_ip -p $dest_port -a password -x restore $key 0  echo "$i migrate key $key"
((i++))
done
⼤家在使⽤的时候,只需要替换 IP 即可。
这个脚本同样有⼀个问题就是使⽤了 keys *,然后⼀个⼀个遍历,如果是⽣产环境,不建议这样使⽤!当然我的脚本也是可以再进⾏优化的!
3、使⽤ redis-dump ⼯具。
Redis-Dump 是⼀个⽤于 Redis 数据导⼊ / 导出的⼯具,是基于 Ruby 实现的,可以⽅便的进⾏ redis 的数据备份。这个⼯具需要先安装,以我的 Mac 为例,安装教程如下:
# 没安装 ruby 的话,先安装 ruby
brew install ruby
# 移除 gem ⾃带源
gem sources --remove /
# 添加淘宝源
gem sources -a /
# 安装 redis-dump
gem install redis-dump -V
⽬前我发现,淘宝的镜像已经出现 bad response Not Found 404 了,被告知镜像维护站点已迁往 Ruby China 镜像。
# 替换镜像地址
gem sources --add / --remove /
# 确认镜像地址是否替换成功
gem sources -l
# 替换成功后再安装 redis-dump
gem install redis-dump -V
安装完成后,就可以使⽤ redis-dump ⼯具进⾏数据的导⼊导出了!
# redis-dump 导出
redis-dump -u :password@源RedisIp:6379 > 源Redis数据⽂件.json
# redis-load 导⼊
cat 源Redis数据⽂件.json | redis-load -u :password@⽬标RedisIp:6379
cat 源Redis数据⽂件.json | redis-load -u :password@⽬标RedisIp:6379
Linux 系统或者 Window 系统也都类似,安装 redis-dump ⼯具完成后直接使⽤ redis-dump 导出,redis-load 导⼊即可完成数据的备份与迁移。
redis-dump ⼯具很强⼤,建议⼤家到官⽹上多看看它的官⽅⽂档。
4、rdb ⽂件迁移
redis-dump ⿇烦就⿇烦在需要进⾏安装,如果我的 Redis 已经有备份机制,⽐如有 rdb ⽂件,那么我们直接迁移 rdb ⽂件就可以达到同样的⽬的。
⾸先,我们可以先关闭源 Redis 实例的 aof 功能。如果不关闭 aof,Redis 默认⽤ aof ⽂件来恢复数据。
# 源实例关闭 aof 功能
redis-cli -h 源RedisIp -a password config set appendonly no
然后使⽤ save 命令把数据固化到 rdb ⽂件中。
# 固化数据到 RDB ⽂件
save
save 完成后,还是通过 config get dir 命令获得保存的 RDB 数据⽂件位置。
接下来,我们需要杀死 redis 进程。杀掉当前 redis 的进程,否则下⼀步的复制 rdb ⽂件,rdb 处于打开的状态,复制的⽂件,会占⽤同样的句柄。
kill -9 redis
# 或者
pkill -9 redis
# 或者⼿段关闭 Redis 服务
然后复制源 redis 的 rdb ⽂件到⽬标 Redis 的 dir 数据⽬录,名字为你要迁移的 redis 的 rdb ⽂件名。
复制完成后,重启⽬标 Redis 实例,数据就迁移完成了。重启完成后可以验证⼀下数据是否成功的复制了。
更多关于Redis数据导⼊导出以及数据迁移的⽅法请查看下⾯的相关链接

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。