在Redis(Ruby)中检索存储的所有键的列表

41

redis-rb gem中是否有一个函数可以返回存储在数据库中的所有键的列表?我的最终目标是遍历所有的键/值对,并对它们执行一些操作。

3个回答

45

当然,redis-rb将所有Redis命令暴露出来,并将它们表示为客户端对象上的方法。

redis.keys('*')

4
.keys 会导致阻塞和性能问题,建议使用 .scan.scan_each 替代。https://dev59.com/yX3aa4cB1Zd3GeqPZCbb - ives

30

如果你的数据库中有大量记录,内核会杀掉你的redis.keys操作,因为它将占用太多的内存。

你需要的是批量提取键值。 redis-rb有一个很好的方法可以做到这一点(redis本身不具备此功能):

    redis.scan_each(match: 'user:*') do |resume_key_name|
        resume_key_name #=> "user:12"
    end

如果您想要所有的键,只需不使用 match 选项。


1
这对我来说非常慢,仅有5.6K个键的Redis数据库返回需要大约15秒的时间。 - Abe Voelker
@AbeVoelker 你可以使用带有“pipelined”的redis,这样会更快。 - Fangxing
请参考@Alex的答案。简单明了。 - Siwei
@SiweiShen申思维的答案对于太多的键将会失败。但是对于几百个键来说还是不错的。 - Evgenia Karunus
@SiweiShen申思维,不建议使用.keys,因为会导致阻塞问题和性能下降。 - ives

8

https://dev59.com/yX3aa4cB1Zd3GeqPZCbb - ives

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