StackExchange.Redis SetScan返回所有集成员

时间:2016-10-21 10:13:19

标签: redis stackexchange.redis nosql

在一个简单的测试中,我有一个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);

改变页面大小没有效果。

1 个答案:

答案 0 :(得分:1)

如果迭代结果,SetScan会在内部处理光标。当需要新页面时,此上下文中的PageSize是SetScan作为计数传递给SETSCAN的内容。您不需要自己处理光标逻辑。只需遍历可枚举:

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

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