迭代Redis中的键

Pra*_*rav 6 redis

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

有没有办法迭代键?喜欢的东西HKEYS *,但有限制N +

编辑:

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

for c in '1234567890abcedf':
    r.keys(c + '*')
Run Code Online (Sandbox Code Playgroud)

小智 7

自 Redis 2.8.0 起可用的是基于游标的 Redis 迭代命令(SCAN、HSCAN 等),可让您高效地迭代数十亿个键。对于您的特定情况,开始使用 HSCAN 而不是 HKEYS/HGETALL。它在服务器资源上高效、廉价并且可扩展性非常好。与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"
Run Code Online (Sandbox Code Playgroud)


Llo*_*ore 0

抱歉,目前,2012 年,简单的答案是否定的,但是,使用 lua 脚本你可以做到这一点,尽管这不是严格意义上的直接 redis。