【问题标题】:StackExchange.Redis SetScan returns all set membersStackExchange.Redis SetScan 返回所有集合成员
【发布时间】:2017-08-26 09:36:03
【问题描述】:

在一个简单的测试中,我有一个包含 10k 个元素的集合。我注意到,在第一次使用 0 游标调用 SetScan 时,它返回整个集合和下一个游标,它将返回许多元素和另一个游标,然后产生完全相同的结果和游标。

下面的代码将在无限循环中运行

var cursor = 0L;

do
{
    var result = redis.SetScan("key", cursor: cursor, pageSize: 100);

    set.AddRange(result);

    cursor = ((IScanningCursor)result).Cursor;

} while (cursor > 0);

改变页面大小没有效果。

【问题讨论】:

    标签: redis stackexchange.redis nosql


    【解决方案1】:

    如果您遍历结果,SetScan 会在内部处理光标。在这种情况下,PageSize 是 SetScan 在需要新页面时传递给 SETSCAN 的计数。您不需要自己处理游标逻辑。只需遍历可枚举:

    foreach(var redisValue in redis.SetScan("key")
    {
        set.Add(redisValue);
    }
    

    如果您需要在中间停止枚举并在带外的其他地方继续枚举,则会显示光标。

    【讨论】:

    • 没关系。但我仍然不明白为什么我的示例代码不能正常工作。提供的代码有问题吗?
    • 如果返回的游标与传入的游标相同,则SetScan完成。您不需要循环,因为第一次调用将始终返回所有元素,因为您没有限制迭代器的结果。设置.AddRange(结果);将导致迭代器(结果)进行所有必要的 Redis 调用以获取整个集合。
    猜你喜欢
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多