当前位置: 首页 > 工具软件 > Redis-Dump > 使用案例 >

【Redis—11】Redis-Dump对Redis数据的导入导出操作

锺离飞鸣
2023-12-01

Redis-Dump提供了强大的Redis数据的导入和导出功能,现在就来看下它的具体用法。

 

一、Redis-Dump的安装

redis-dump是将redis和json互转的工具;redis-dump是基于ruby开发,需要ruby环境,而且新版本的redis-dump要求2.2.2以上的ruby版本,centos中yum只能安装2.0版本的ruby。需要先安装ruby的管理工具rvm安装高版本的ruby;

安装rvm

可参考官网:http://rvm.io/

执行下列两个命令安装rvm;

$ gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
 
$ \curl -sSL https://get.rvm.io | bash -s stable

安装ruby

# 查看可以安装的Ruby版本
rvm list known 
# 当前最高的稳定版本是2.5.1
rvm install ruby 2.5.1

安装redis-dump

# 移除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

首先,可以输入如下命令查看所有可选项:

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

同样,我们可以首先输入如下命令查看所有可选项:

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

 

 类似资料: