我刚开始使用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"