安装RedisDump以及注意ERROR (Errno::ENOENT)

RedisDump是一个用于Redis数据导入/导出的工具,是基于Ruby实现的,安装RedisDump,需要先安装Ruby。

1. 相关链接

GitHub:https://github.com/delano/redis-dump
官方文档:http://delanotes.com/redis-dump
rubyinstaller: https://rubyinstaller.org/downloads/
参考文档: https://cuiqingcai.com/5587.html

2. 安装Ruby

有关Ruby的安装方式可以参考http://www.ruby-lang.org/zh_cn/documentation/installation,这里列出了所有平台的安装方式,可以根据对应的平台选用合适的安装方式。
我安装的地址(windos10):https://rubyinstaller.org/downloads/

安装RedisDump以及注意ERROR (Errno::ENOENT)_第1张图片

3. gem安装

安装完成之后,就可以执行gem命令了,它类似于Python中的pip命令。
首先打开终端,利用gem命令,我们可以安装RedisDump,具体如下:

gem install redis-dump

执行完毕之后,即可完成RedisDump的安装。
安装RedisDump以及注意ERROR (Errno::ENOENT)_第2张图片

4. 验证导入导出功能(还需要修改dump.rb文件,查看下面5.2)

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. 报错检查

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用#注释掉,保存即可
安装RedisDump以及注意ERROR (Errno::ENOENT)_第3张图片
之后即可实现正常导出了

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. 常用导入导出指令

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

没有报错,即导入成功了,可以使用上面的导出命令进行查看
安装RedisDump以及注意ERROR (Errno::ENOENT)_第4张图片

Linux 下可以使用如下命令,实现导入 JSON 文件

cat red.jl | redis-load -u :123456@localhost:6379

你可能感兴趣的:(Python,Full,Stack,Redis,Debug)