【问题标题】:How I get ALL keys in Redis? 1+ billion keys in total如何在 Redis 中获取所有密钥?总共 1+ 亿个密钥
【发布时间】:2014-10-23 05:23:01
【问题描述】:

redis 中有 1+ 亿个键。
现在我想得到 ALL python 中的键。

partkeys = redisclient.keys("abcd*")

会好的。
但是

keys = redisclient.keys("ab*")

将引发 ResponseError。

redis.exceptions.ResponseError: 键错误

keys = redisclient.keys("*")

会引发 ConnectionError。
redis.exceptions.ConnectionError:连接 demo.abcd.com:6397 时出现错误 111。连接被拒绝。

有什么帮助吗?

【问题讨论】:

  • 你用的是什么版本的redis?如果 >= 2.8,请尝试 scan_iter() 方法。
  • 我没有得到redis的版本。但是 Redis 和 StrictRedis 的实例没有 scan_iter() 方法。
  • KEYS 是一个危险的命令 - 它在运行时会阻止所有其他操作,并且根据数据集,可能会消耗大量 RAM。你得到的连接错误就是因为这个。您必须像在第一个示例中那样将您的密钥空间“拆分”为小块并独立处理每个块......或者升级到 2.8+ 并使用 SCAN。
  • 或者只是解析转储rdb...用python编写的解析器:github.com/sripathikrishnan/redis-rdb-tools

标签: python redis key sortedset


【解决方案1】:

然后使用SCAN 命令循环您的密钥集。使用 KEYS 总是一个坏主意。请注意,SCAN 仅在 Redis 2.8.0 之后可用。

【讨论】:

    【解决方案2】:

    我假设你使用py-redis,使用scan_iter,那么:

    for k in redisclient.scan_iter(match='*'):
         # Do something with k
         # ...
    

    正如其他人所说,SCAN 仅在 Redis 2.8.0 之后才可用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-06
      • 2016-09-23
      • 2018-11-29
      • 1970-01-01
      • 2013-05-14
      • 1970-01-01
      相关资源
      最近更新 更多