redis 扫描列表类型的特定键

Sum*_*ave 3 javascript redis

我正在尝试迭代 redis 中的一个列表,该列表的长度很大,并且 lrange 会导致 JS 崩溃。

致命错误:CALL_AND_RETRY_2 分配失败 - 进程内存不足 致命错误:JS 分配失败 - 进程内存不足

我搜索了 scan,但它只为您提供键中的匹配结果,并且不能使用它来迭代作为列表类型的键。

redis-cli: scan 0 MATCH my:key
redis-cli: 1) 18
redis-cli: 2) my:key
redis-cli: type my:key
redis-cli: list
Run Code Online (Sandbox Code Playgroud)

现在,我想使用 scan 迭代 my:key,但无法找到它的任何语法。

for*_*ack 6

不,您不能使用SCAN命令来迭代列表。SCAN用于迭代键空间。

相反,您应该使用LRANGE迭代列表。

// Get the first 10 items in the list.
LRANGE list 0 9
// Get the next 10 items
LRANGE list 10 19
// ... until all items have been iterated.
Run Code Online (Sandbox Code Playgroud)

然而,由于 的时间复杂度为LRANGEO(S+N)这不是一个便宜的操作,特别是当列表很大时。当您用于LRANGE获取第 100 个项目时,Redis 必须迭代第一个99项目。

所以我认为你应该重新设计你的系统,将列表拆分成几个小列表,或者使用其他数据结构。