将Redis查询输出保存到文件

21

使用redis-cli连接到指定服务器:

redis-cli -h 10.1.xx.xx

然后 select 1

接着,只需获取一个关键字的特征列表:

KEYS data_column*

这将在命令行上打印该列值的列表。然而,有许多值,我想将查询结果保存到文件中。

一般来说,在命令后面加上 > 文件名 即可将输出保存到文件中。但在这种情况下,由于是在redis服务器上运行,此方法无效。如何保存此类查询结果呢?

6个回答

32

只需使用:

./redis-cli -h 10.1.xx.xx -n 1 keys 'data_column*' >file.txt

这样,"Access denied" 就是响应。我所做的方式(连接到 IP,然后选择 1,在 OK 后,输入 KEYS 列*)实际上会在屏幕上打印,但我只是无法保存。 - xavi
请确保您在实际拥有写入权限的位置创建文件。例如,使用> /tmp/file.txt。 - Didier Spezia
确保已经处理好了。实际上它返回一个空列表。如果按照我在问题中解释的方式操作,它会返回值列表。顺便说一下,地址是这样的 10.1.xx.xx:xxxx(选择 1 移动后它会出现在 10.1.xx.xx:xxxx[1] 中)。 - xavi
1
在我看来,这是你的问题。你不应该使用“-h 10.1.xx.xx:xxxx”,而应该使用“-h 10.1.xx.xx -p xxxx -n 1”。在redis-cli命令行中,地址、端口和数据库都由不同的选项管理。 - Didier Spezia
尽管使用了不同的端口名称和主机名(elastic cache name),但仍然得到空列表 - ./redis-cli -h assigned.name.cache.amazonaws.com -p 6379 -n 1 keys 'keyName_*'。 - Sandeepan Nath
显示剩余2条评论

6
echo "keys data_column*" | redis-cli -h 10.1.xx.xx -p xx > file.txt

5

根据hjiam2的说法,但我不能对他们的帖子进行评论。 我误解了他们所说的“键数据列*”,最终用以下方法实现了我想要的效果:

echo 'GET key_name' | redis-cli -h localhost -p 6379 > key_value.txt

我有一个需要查看的长键值,因此需要将其放入文件中,以便可以随意处理。使用上述命令可以实现此目的。

显然,请确保key_name是您要查找的内容,并确保hostport也是正确的。


3

使用以下命令行将所有键导出到文件。

./redis-cli -h XX -p YY KEYS "keyname*" >> filedata.txt

XX -> 主机名

YY -> 密码


2
这是我成功的方法(redis-cli 版本为 5.0.7):
redis-cli -a [password] -h [hostname] -p [port] [operation name] [key] >> /tmp/myfile.txt 

例如,假设有以下内容:
redis-cli -a password -h 127.0.0.1 -p 6379 GET myrediskey >> /tmp/myfile.txt 

1
我一直在寻找这个问题的解决方案,但是没有找到合适的方法。因此,我编写了一段JS代码来按照我的方式解决这个问题,希望它能有用。
const redis = require("redis");
const client = redis.createClient(6379);
const fs = require("fs")

client.KEYS("*", (e, res) => {
  for (i=0; i < res.length; i++){
    client.get(res[i], (e, item) => {
      fs.appendFile('output.txt', "Item: " + item + "\n", function (err) {
        if (err) throw err;
        console.log('Item Saved!');
      });
    })
  }
})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接