Redis-Dump提供了强大的Redis数据的导入和导出功能,现在就来看下它的具体用法。
redis-dump是将redis和json互转的工具;redis-dump是基于ruby开发,需要ruby环境,而且新版本的redis-dump要求2.2.2以上的ruby版本,centos中yum只能安装2.0版本的ruby。需要先安装ruby的管理工具rvm安装高版本的ruby;
可参考官网:http://rvm.io/
执行下列两个命令安装rvm;
$ gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
$ \curl -sSL https://get.rvm.io | bash -s stable
# 查看可以安装的Ruby版本
rvm list known
# 当前最高的稳定版本是2.5.1
rvm install ruby 2.5.1
# 移除gem自带源,国内连不上
$ gem sources --remove https://rubygems.org/
# 添加国内淘宝源
$ gem sources -a https://ruby.taobao.org/
# 安装redis-dump
$ gem install redis-dump -V
查看redis-dump版本,安装成功可以开心的备份和还原redis了
$ redis-dump -v
$ redis-dump v0.4.0
RedisDump提供了两个可执行命令:redis-dump
用于导出数据,redis-load
用于导入数据。
首先,可以输入如下命令查看所有可选项:
redis-dump -h
运行结果如下:
Usage: redis-dump [global options] COMMAND [command options]
-u, --uri=S Redis URI (e.g. redis://hostname[:port])
-d, --database=S Redis database (e.g. -d 15)
-s, --sleep=S Sleep for S seconds after dumping (for debugging)
-c, --count=S Chunk size (default: 10000)
-f, --filter=S Filter selected keys (passed directly to redis' KEYS command)
-O, --without_optimizations Disable run time optimizations
-V, --version Display version
-D, --debug
--nosafe
其中:
-u
代表Redis连接字符串,-d
代表数据库代号,-s
代表导出之后的休眠时间,-c
代表分块大小,默认是10000,-f
代表导出时的过滤器,-O
代表禁用运行时优化,-V
用于显示版本,-D
表示开启调试。
我们拿本地的Redis做测试,运行在6379端口上,密码为xxxx,导出命令如下:
redis-dump -u :xxxx@localhost:6379
如果没有密码的话,可以不加密码前缀,命令如下:
redis-dump -u localhost:6379
运行之后,可以将本地0至15号数据库的所有数据输出出来,例如:
{"db":0,"key":"name","ttl":-1,"type":"string","value":"James","size":5}
{"db":0,"key":"name2","ttl":-1,"type":"string","value":"Durant","size":6}
{"db":0,"key":"name3","ttl":-1,"type":"string","value":"Durant","size":6}
{"db":0,"key":"name4","ttl":-1,"type":"string","value":"HelloWorld","size":10}
{"db":0,"key":"name5","ttl":-1,"type":"string","value":"James","size":5}
{"db":0,"key":"name6","ttl":-1,"type":"string","value":"James","size":5}
{"db":0,"key":"age","ttl":-1,"type":"string","value":"1","size":1}
{"db":0,"key":"age2","ttl":-1,"type":"string","value":"-5","size":2}
每条数据都包含6个字段,其中:
db
即数据库代号,key
即键名,ttl
即该键值对的有效时间,type
即键值类型,value
即内容,size
即占用空间。
如果想要将其输出为JSON行文件,可以使用如下命令:
redis-dump -u :xxxx@localhost:6379 > ./redis_data.jl
这样就可以成功将Redis的所有数据库的所有数据导出成JSON行文件了。
另外,可以使用 -d
参数指定某个数据库的导出,例如只导出1号数据库的内容:
redis-dump -u :xxxx@localhost:6379 -d 1 > ./redis.data.jl
如果只想导出特定的内容,比如想导出以adsl
开头的数据,可以加入 -f
参数用来过滤,命令如下:
redis-dump -u :xxxx@localhost:6379 -f adsl:* > ./redis.data.jl
其中 -f
参数即Redis的keys
命令的参数,可以写一些过滤规则。
同样,我们可以首先输入如下命令查看所有可选项:
redis-load -h
运行结果如下:
redis-load --help
Try: redis-load [global options] COMMAND [command options]
-u, --uri=S Redis URI (e.g. redis://hostname[:port])
-d, --database=S Redis database (e.g. -d 15)
-s, --sleep=S Sleep for S seconds after dumping (for debugging)
-n, --no_check_utf8
-V, --version Display version
-D, --debug
--nosafe
其中:
-u
代表Redis连接字符串,-d
代表数据库代号,默认是全部,-s
代表导出之后的休眠时间,-n
代表不检测UTF-8编码,-V
表示显示版本,-D
表示开启调试。
我们可以将JSON行文件导入到Redis数据库中:
< redis_data.json redis-load -u :xxxx@localhost:6379
这样就可以成功将JSON行文件导入到数据库中了。
另外,下面的命令同样可以达到同样的效果:
cat redis_data.json | redis-load -u :xxxx@localhost:6379