在一个简单的测试中,我有一个包含 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);
改变页面大小不会产生影响。
最佳答案
如果您迭代结果,SetScan 会在内部处理光标。此上下文中的 PageSize 是当需要新页面时 SetScan 作为计数传递给 SETSCAN 的值。您不需要自己处理游标逻辑。只需迭代可枚举即可:
foreach(var redisValue in redis.SetScan("key")
{
set.Add(redisValue);
}
如果您需要在中间停止枚举并在带外的其他位置继续,则会暴露光标。
关于redis - StackExchange.Redis SetScan 返回所有集合成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40173944/