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

我有一个非常小的数据保存在 Redis 和下面的工作正在按照预期,将允许我下载所有的密钥。

redis-cli keys *

有办法拿到 keys+values *吗?

204302 次浏览

虽然没有这样的命令,但是您可以编写一个脚本来完成这项工作。

您需要为每个键执行一个“ type”命令:

> 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

redis >= 5.x中引入了一种新的数据类型 stream

> type <key>

should give you stream. To get its values:

> XRANGE <key> - +

简短的回答 :

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

Long answer:

拿到所有的钥匙:

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