我一直在尝试使用redis-cli在redis数据库中获取所有值。
原则上,这是通过redis-cli keys "*"
(返回所有键)并将其管道传递到redis-cli get
(返回键的值)来完成的。
此后,我(在SO上)发现了一种方法:
echo 'keys YOURKEY*' | redis-cli | sed 's/^/get /' | redis-cli
但是在此之前,我尝试过此操作,并且get命令似乎从未运行过。我做错了xargs吗?:
redis-cli keys "*" | xargs -0 -I % redis-cli get "%"
我很欣赏“为什么不做这项工作”的问题,但我认为答案对于xargs感到困惑的人将是有益的。
答案 0 :(得分:1)
您正在对-0
使用xargs
标志,这表示您的输入项以空字符(ASCII 0)而不是空格终止。 redis-cli
命令不太可能以这种格式输出密钥。实际上,似乎产生的输出只有一个键/行,如下所示:
# redis-cli keys "*"
_tooz_group:central-global
_tooz_beats:38225c46-7ed8-4c2a-b1eb-6400d0f99004
_tooz_beats:bea903f7-ab5d-4503-be19-f2029beece93
_tooz_beats:bd859c91-0245-45cf-a289-23fc25998e97
_tooz_beats:04528af5-dd97-41af-87a6-d7dc0c0d9f5d
_tooz_beats:974b9d9d-86ff-457e-9a5c-e857ec12a915
_tooz_beats:a55cfe65-f344-4ed4-9b9f-a0ace4d8f6d3
如果您从-0
调用中删除了xargs
,它应该可以工作
很好:
# redis-cli keys "*" | xargs -I% redis-cli get %
如果您的键包含空格,则此键将无效(因为
xargs
希望您的输入数据以空格分隔)。在那里面
情况下,您可以将分隔符明确设置为\n
:
# redis-cli keys "*" | xargs --delimiter '\n' -I% redis-cli get %
答案 1 :(得分:0)
我想你想要这个:
# Set some data
redis-cli set mb1 A
OK
# Set some more
redis-cli set mb2 B
OK
# Check the keys we have
redis-cli keys "mb*"
1) "mb1"
2) "mb2"
#Retrieve those puppies, passing one at a time with "-n 1"
redis-cli keys "mb*" | xargs -n 1 redis-cli get
"A"
"B"