在命令提示符下获取Redis键和值


73

我在Redis中保存了非常小的数据,并且以下数据正在按预期运行,这将允许我下载所有密钥。

redis-cli keys * 

有什么办法可以得到keys+values *吗?

Answers:


160

没有命令,但是您可以编写脚本来实现。

您将需要为每个键执行一个“类型”命令:

> type <key>

并根据响应执行:

  • 对于“字符串”: get <key>
  • 对于“哈希”: hgetall <key>
  • 对于“列表”: lrange <key> 0 -1
  • 对于“设置”: smembers <key>
  • 对于“ zset”: zrange <key> 0 -1 withscores

请记住,对于散列和排序集,您将获得键/分数和值。

可能的sh实现:

#!/bin/sh -eu
keys=`redis-cli keys '*'`
if [ "$keys" ]; then
    echo "$keys" | while IFS= read -r key; do
        type=`echo | redis-cli type "$key"`
        case "$type" in
            string) value=`echo | redis-cli get "$key"`;;
            hash) value=`echo | redis-cli hgetall "$key"`;;
            set) value=`echo | redis-cli smembers "$key"`;;
            list) value=`echo | redis-cli lrange "$key" 0 -1`;;
            zset) value=`echo | redis-cli zrange "$key" 0 -1 withscores`;;
        esac
        echo "> $key ($type):"
        echo "$value" | sed -E 's/^/    /'
    done
fi

但请注意:

警告:KEYS仅在生产环境中应格外小心地考虑使用此命令。在大型数据库上执行时,可能会破坏性能。此命令用于调试和特殊操作,例如更改键空间布局。

https://redis.io/commands/keys


另外,这些值表示不同的“类型”并获取不同的内容
coolest_head 2011年

1
您能指导如何编写吗?如果我从redis中获取数据,则可以使用grep和sed之类的命令。到目前为止,如上所述,我只能导出键,而不能导出值。
shantanuo

取决于您要如何处理。您是否要创建一系列命令来重现您的数据?或您想做什么?这些命令将为您提供数据,您只需要编写所需的输出即可。
seppo0010 2011年

有什么方法可以通过AUTH命令使脚本适应支持密码身份验证的要求?我尝试在您的redis-cli命令中添加“ AUTH my_password”,但它不起作用
。– ajfbiw.s

2

使用redis >= 5.xstream引入了新的数据类型。所以

> type <key>

应该给你stream。要获取其值:

> XRANGE <key> - +

2

简短答案

for i in $(redis-cli KEYS '*'); do echo $i; redis-cli GET $i; done

长答案

要获取所有密钥:

redis-cli KEYS '*' 

获取键的值:

redis-cli GET <your-key>

并且如果您想要所有值:

for i in $(redis-cli KEYS '*'); do redis-cli GET $i; done

最后是所有键和值:

for i in $(redis-cli KEYS '*'); do echo $i; redis-cli GET $i; done
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.