【问题标题】:Termination condition of Redis sscan (or scan) operationRedis sscan(或扫描)操作的终止条件
【发布时间】:2021-11-24 08:42:14
【问题描述】:

我通过 SADD、SREM 使用具有 set 结构的 Redis 来分别插入和删除。 在某个时间点,我需要迭代集合中的所有元素并处理它们,最后从集合中删除每个元素。为了迭代所有元素,我使用了SSCAN。在文档中,他们说如下,

命令也允许返回零元素,只要返回的游标不为零,客户端不应该认为迭代完成

为了迭代集合中的所有元素,我从零开始光标。然后,我处理了从 SSCAN 返回的每个元素,并使用 SREM 操作从集合中删除每个元素。我使用从 SSCAN 操作的先前结果返回的游标进行下一次迭代。这个过程一直持续到从 SSAN 返回的游标为零并且返回的数组中没有元素为止。在迭代期间,没有新元素被添加到集合中。 但是,完成该过程后,集合中还存在元素。 在我的预期中,集合应该是空的。有什么问题? 我应该检查集合中是否有元素吗?例如,通过使用 SCARD?

这是我做的操作,

SADD key element
SADD key element
..
..

result = SSCAN key 0 Count 100
while elements and next_cursor != 0:
  for e in elements
    process e
    SREM key
  SSCAN key next_cursor Count 100

// process the last result returned with zero value cursor
for e in elements
  process e
  SREM key

【问题讨论】:

    标签: redis


    【解决方案1】:

    这个过程一直持续到从 SSAN 返回的游标都为零并且返回的数组中没有元素为止

    这是不正确的。您应该只检查返回的光标是否为 0。

    cursor = 0
    while true:
        cursor = SSCAN key cursor count 100
        process_elements
        if cursor == 0:
            break
    

    【讨论】:

      猜你喜欢
      • 2019-12-12
      • 1970-01-01
      • 1970-01-01
      • 2016-11-06
      • 2016-05-30
      • 2021-07-27
      • 2019-01-28
      • 2015-10-09
      • 1970-01-01
      相关资源
      最近更新 更多