我正在尝试迭代 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,但无法找到它的任何语法。
不,您不能使用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)
然而,由于 的时间复杂度为LRANGE,O(S+N)这不是一个便宜的操作,特别是当列表很大时。当您用于LRANGE获取第 100 个项目时,Redis 必须迭代第一个99项目。
所以我认为你应该重新设计你的系统,将列表拆分成几个小列表,或者使用其他数据结构。
| 归档时间: |
|
| 查看次数: |
1926 次 |
| 最近记录: |