在Redis数据库中检索/列出所有键值对

73

我在Ruby中使用一个名为Ohm的ORM,它建立在Redis之上,想知道数据实际上是如何存储的。我想知道是否有一种方法可以列出Redis数据库中所有键/值。

更新:
对于其他尝试使用redis-cli测试的人,请使用以下命令:

$ redis-cli keys
* (press * followed by Ctrl-D)
... (prints a list of keys and exits)
$

感谢@antirez和@hellvinz!

4个回答

119
您可以使用Redis发行版中包含的redis-cli工具来探索Redis数据集。
只需启动该工具而不带参数,然后输入命令以探索数据集。
例如,KEYS将列出与glob样式模式匹配的所有键,例如使用:keys *您将看到所有可用的键。
然后,您可以使用TYPE命令检查给定键的类型,如果它是列表,则可以使用LRANGE mykey 0 -1检索其中的元素。 如果它是一个Set,您将使用SMEMBERS mykey等。 请查阅Redis文档以获取所有可用命令及其工作方式的列表。

33

从命令行中,您还可以使用dump命令,该命令自Redis 2.6.0版本起可用。

redis-cli KEYS \* | xargs -n 1 redis-cli dump

请注意,如果您不介意,此方法也适用于早期版本的get命令。
更新(V2.8或更高版本):SCAN是一个更好的替代方案,可以替代KEYS,因为它不会阻塞服务器,也不会消耗大量资源。建议使用它。

如果您使用的是较旧版本的Redis,可以使用GET命令。如果您有很多键,则可以使用-P参数并行化xargs命令。示例:redis-cli KEYS * |xargs -n 1 -P8 redis-cli get - Andy Triggs
9
你的回答是我第一个看到的,它告诉我在命令行上必须将 * 转义为 \*。在此之前,我浪费了大约20分钟的时间,一直收到“参数数量错误”的redis命令,而这个命令在客户端中完全有效,直到我找到了你的回答。谢谢。 - Sam Critchley
1
这样做是可行的,但是每个键都要运行一个 redis-cli,速度会非常慢。 - tokland

21

这里只是在antirez的回答中添加一个实用的Ruby示例(我不敢与他竞争)

irb(main):002:0> require 'rubygems'
=> true
irb(main):003:0> require 'redis'
=> true
irb(main):004:0> r = Redis.new
=> #<Redis:0x8605b64 @sock=#<TCPSocket:0x8605ab0>, @timeout=5, @port=6379, @db=0, @host="127.0.0.1">
irb(main):005:0> r.keys('*')

3

我来到这里是因为我在寻找如何备份redis中所有的键/值。如果你也有同样的需求,可以尝试下面的命令:

redis-cli bgsave

文章中链接的网站证书无效,但该命令正是我正在寻找的。 - mirzu
链接已经失效:(404未找到) - Fissure

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