如何在Rails上使用ruby从redis获取所有匹配的密钥

时间:2019-06-07 06:57:56

标签: ruby-on-rails ruby redis

如何使用Ruby on Rails从Redis中存储的密钥列表中获取所有匹配的密钥。我正在使用Ruby 2.5.1版本。

我使用了 SCAN 来查询匹配的键,但是它总是返回2个值,而不是5个。那么如何在Ruby On Rails代码中传递计数?

无计数返回2个值:

  127.0.0.1:6379> SCAN 100 match *sa*
       1) "sasikala (6965)"
       2) "Zupaen sasi (6961)"

随着计数返回全部(5)值:

127.0.0.1:6379> SCAN 100 match *sa* count 100
           1) "Sasai (6965)"
           2) "Zupaen sasi (6961)"
           3) "Rosan (7000)"
           4) "Alisa (2363)"
           5) "Carissa (4455)"

Ruby on Rails代码:

keys = redis.scan(0, :match => '*' + name + '*')

请对此发表您的看法。

1 个答案:

答案 0 :(得分:1)

假设您使用官方的redis-rb来处理redis连接,那么他们的tests contain the answer就可以解决您的问题:

loop.inject([0, []]) do |(cursor, keys), _|
  cursor, new_keys = redis.scan(cursor, match: '{key}*')
  keys << new_keys
  break keys if cursor == '0'
  [cursor, keys]
end