【问题标题】:redis scan over a particular key which is type of listredis 扫描列表类型的特定键
【发布时间】:2018-04-17 10:09:48
【问题描述】:

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

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

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

redis-cli: scan 0 MATCH my:key
redis-cli: 1) 18
redis-cli: 2) my:key
redis-cli: type my:key
redis-cli: list

现在,我想使用扫描遍历 my:key,但找不到任何语法。

【问题讨论】:

    标签: javascript redis


    【解决方案1】:

    不,您不能使用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.
    

    但是,由于LRANGE 的时间复杂度是O(S+N),这不是廉价的操作,尤其是当列表很大时。当您使用LRANGE 获取第100 个项目时,Redis 必须迭代第一个99 项目。

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

    【讨论】:

      猜你喜欢
      • 2015-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-30
      • 1970-01-01
      • 1970-01-01
      • 2015-04-02
      相关资源
      最近更新 更多