我知道为了获得Redis中所有键的所有列表,我必须使用KEYS *,但有没有办法将所有键与它们的值一起输出?
几分钟的搜索没有产生任何结果.
PS非常感谢你的答案,但我正在寻找原生解决方案.我可以编写一个函数来遍历KEYS *我自己的所有输出.
fir*_*ynx 37
在Redis的命令文件包括获取键和多键的值没有本机命令.
执行此操作的最原生方法是使用命令或命令将lua脚本加载到redis中.SCRIPT LOADEVAL
一个解决办法是使用一些魔法的bash,就像这样:
echo 'keys YOURKEY*' | redis-cli | sed 's/^/get /' | redis-cli
Run Code Online (Sandbox Code Playgroud)
这将输出以YOURKEY开头的所有键的数据
请注意,keys命令是一个阻塞操作,应谨慎使用.
Juu*_*nen 14
我稍微改进了bash解决方案,以便使用更有效的扫描而不是keys,并支持打印出数组和哈希值。我的解决方案还会打印出密钥名称。
redis_print.sh:
#!/bin/bash
# Default to '*' key pattern, meaning all redis keys in the namespace
REDIS_KEY_PATTERN="${REDIS_KEY_PATTERN:-*}"
for key in $(redis-cli --scan --pattern "$REDIS_KEY_PATTERN")
do
type=$(redis-cli type $key)
if [ $type = "list" ]
then
printf "$key => \n$(redis-cli lrange $key 0 -1 | sed 's/^/ /')\n"
elif [ $type = "hash" ]
then
printf "$key => \n$(redis-cli hgetall $key | sed 's/^/ /')\n"
else
printf "$key => $(redis-cli get $key)\n"
fi
done
Run Code Online (Sandbox Code Playgroud)
注意:您可以通过删除redis_print.sh的第一行并命令来制定此脚本的单行:cat redis_print.sh | tr '\n' ';' | awk '$1=$1'
小智 12
是的,你可以使用下面的bash脚本打印所有键,
for key in $(redis-cli -p 6379 keys \*);
do echo "Key : '$key'"
redis-cli -p 6379 GET $key;
done
Run Code Online (Sandbox Code Playgroud)
其中,6379是redis运行的端口.
如果您有很多键,则不应在 Redis 生产实例上使用 KEYS 命令,因为它可能会阻塞 Redis 事件循环几秒钟。
我会生成一个转储 (bgsave),然后使用以下 Python 包来解析它并提取数据:
https://github.com/sripathikrishnan/redis-rdb-tools
您可以有 json 输出,或在 Python 中自定义您自己的输出。
您可以使用MGET一次获取多个键的值。
例子:
redis> SET key1 "Hello"
"OK"
redis> SET key2 "World"
"OK"
redis> MGET key1 key2 nonexisting
1) "Hello"
2) "World"
3) (nil)
Run Code Online (Sandbox Code Playgroud)
要列出所有键和值,您可能必须使用 bash 或类似的东西,但当MGET您事先知道要查找哪些键时,可以帮助列出所有值。
| 归档时间: |
|
| 查看次数: |
64997 次 |
| 最近记录: |