我刚开始使用Redis。我的数据库包含大约10亿条记录。使用HKEYS *会导致内存不足错误。

有没有办法遍历键?类似于HKEYS *,但限制为n?

编辑:

我现在正在使用匹配模式的循环

for c in '1234567890abcedf':
    r.keys(c + '*')

最佳答案

自Redis 2.8.0起提供基于光标的Redis迭代命令(SCAN,HSCAN等),可让您有效地迭代数十亿个键。
对于您的特定情况,开始使用HSCAN代替HKEYS/HGETALL。它是efficient, cheap on server resources and scales very well。您甚至可以像HKEYS一样向HSCAN添加一个模式。

例如

127.0.0.1:6379> HMSET hash0 key0 value0 key1 value1 entry0 data0 entry1 data1
OK
127.0.0.1:6379> HSCAN hash0 0 MATCH key*
1) "0"
2) 1) "key0"
   2) "value0"
   3) "key1"
   4) "value1"
127.0.0.1:6379> HSCAN hash0 0
1) "0"
2) 1) "key0"
   2) "value0"
   3) "key1"
   4) "value1"
   5) "entry0"
   6) "data0"
   7) "entry1"
   8) "data1"

09-12 16:11