在一个简单的测试中,我有一个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);
改变页面大小没有效果。
答案 0 :(得分:1)
如果迭代结果,SetScan会在内部处理光标。当需要新页面时,此上下文中的PageSize是SetScan作为计数传递给SETSCAN的内容。您不需要自己处理光标逻辑。只需遍历可枚举:
foreach(var redisValue in redis.SetScan("key")
{
set.Add(redisValue);
}
如果您需要在中间停止枚举并继续在带外的其他地方,则会公开光标。