Redis的"KEYS"命令如何进行分页?

3
我需要获取所有匹配给定模式*_xyz_*redis 中的键,然后通过以下 python 代码获取它们的值:
  def get_keys(self,pattern):
    self.r_prod.keys(pattern);
    keys = self.r_prod.execute();

    for i in keys[0]:
      self.r_prod.get(i);
    return self.r_prod.execute();

现在keys的数量已经很大,无法一次性全部保存在内存中。因此,我想知道是否有一种方法可以分页调用keys来限制其数量?


1
你需要使用scan来完成这个操作。http://redis.io/commands/scan - Joe Doherty
1个回答

6
使用 SCAN 命令:
>>> import redis
>>> r = redis.Redis()
>>> for x in r.scan_iter('dummy*'):
...   print(x)
... 
b'dummy3'
b'dummy2'
b'dummy1'

谢谢,但是能否在管道中进行扫描?或者更准确地说,scan命令是否为每次迭代都需要TCP连接,还是隐式创建了一个管道? - Mangat Rai Modi
好的,我明白了。它在每次迭代时创建一个新的调用,但我可以限制迭代:https://github.com/andymccurdy/redis-py/blob/master/redis/client.py#L1372 - Mangat Rai Modi

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