RedisDump是一个用于Redis数据导入/导出的工具,是基于Ruby实现的,安装RedisDump,需要先安装Ruby。
GitHub:https://github.com/delano/redis-dump
官方文档:http://delanotes.com/redis-dump
rubyinstaller: https://rubyinstaller.org/downloads/
参考文档: https://cuiqingcai.com/5587.html
有关Ruby的安装方式可以参考http://www.ruby-lang.org/zh_cn/documentation/installation,这里列出了所有平台的安装方式,可以根据对应的平台选用合适的安装方式。
我安装的地址(windos10):https://rubyinstaller.org/downloads/
安装完成之后,就可以执行gem命令了,它类似于Python中的pip命令。
首先打开终端,利用gem命令,我们可以安装RedisDump,具体如下:
gem install redis-dump
RedisDump提供了两个可执行命令:redis-dump
用于导出数据,redis-load
用于导入数据。
redis-dump
首先,可以输入如下命令查看所有可选项:
redis-dump -h
运行结果如下:
C:\Users\www52>redis-dump -h
Try: C:/Ruby26-x64/bin/redis-dump show-commands
Usage: C:/Ruby26-x64/bin/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)
-a, --password=S Redis password (e.g. -a 'my@pass/word')
-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)
-b, --base64 Encode key values as base64 (useful for binary values)
-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端口上,密码为123456,导出命令如下:
redis-dump -u :123456@localhost:6379
如果没有密码的话,可以不加密码前缀,命令如下:
redis-dump -u localhost:6379
5.1 NOAUTH Authentication required.
身份验证(密码验证)异常
一般是指没有输入密码,之前Redis是设置了密码,这时需要输入正确的密码才能操作。 比如上面的指令 redis-dump -u localhost:6379
就会报错。
下面的代码也类似,在有密码的情况下,必须输入密码,否则报redis.exceptions.AuthenticationError: Authentication required.
的错误。
# !pip install redis
from redis import StrictRedis, ConnectionPool
# 连接 Redis
redis = StrictRedis(host='localhost', port=6379, db=0, password='123456')
redis.set('name', 'Evan')
print(redis.get('name')) # b'Evan'
# elif password=None, will response: redis.exceptions.AuthenticationError: Authentication required.
5.2 ERROR (Errno::ENOENT): No such file or directory - ps -o rss= -p 9044
导出异常
解决方法 到 ruby 安装目录 如下目录:
C:\Ruby26-x64\lib\ruby\gems\2.6.0\gems\redis-dump-0.4.0\lib\redis
下的dump.rb
文件,
用记事本打开,将第32行 ps -o rss= -p #{Process.pid}.to_i # in kb用#注释掉,保存即可
之后即可实现正常导出了
C:\Users\www52>redis-dump -u :123456@localhost:6379 > ./redis_data.jl
C:\Users\www52>redis-dump -u :123456@localhost:6379
{"db":0,"key":"name","ttl":-1,"type":"string","value":"Evan","size":4}
...
redis-dump -u :123456@localhost:6379 > ./redis_data.jl
这样就可以成功将Redis的所有数据库的所有数据导出成JSON行文件了。
6.1 导出到控制台显示
C:\Users\www52>redis-dump -u :123456@localhost:6379
6.2 导出 json 文件
C:\Users\www52>redis-dump -u :123456@localhost:6379 > ./redis_data.jl
6.3 过滤导出,例如:导出以 Eva
为前缀的数据, -f 参数即Redis 的 keys 命令的参数
模糊查询: *name*
即 key 包含 name
的数据记录都导出,其他不含 name
的记录不导出
以 xxx 开头: name*
即 key 以 name
为前缀的都导出。
C:\Users\www52>redis-dump -u :123456@localhost:6379 -f Eva* > ./redis_data.jl
6.4 导出指定数据库的数据
C:\Users\www52>redis-dump -u :123456@localhost:6379 -d 0 > ./redis_data.jl
6.5 导入
C:\Users\www52>redis-load --help
Try: C:/Ruby26-x64/bin/redis-load show-commands
Usage: C:/Ruby26-x64/bin/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)
-a, --password=S Redis password (e.g. -a 'my@pass/word')
-s, --sleep=S Sleep for S seconds after dumping (for debugging)
-b, --base64 Decode key values from base64 (used with redis-dump -b)
-n, --no_check_utf8
-V, --version Display version
-D, --debug
--nosafe
其中
-u 代表Redis连接字符串,
-d 代表数据库代号,默认是全部,
-s 代表导出之后的休眠时间,
-n 代表不检测UTF-8编码,
-V 表示显示版本,
-D 表示开启调试。
将 JSON 文件导入到 Redis 数据库中:
< red.jl redis-load -u :123456@localhost:6379
Linux 下可以使用如下命令,实现导入 JSON 文件
cat red.jl | redis-load -u :123456@localhost:6379