Redis SetScan返回所有集合成员
在一个简单的测试中,我有一组10k元素。我注意到,在第一个Redis SetScan返回所有集合成员,redis,stackexchange.redis,nosql,Redis,Stackexchange.redis,Nosql,在一个简单的测试中,我有一组10k元素。我注意到,在第一个SetScan调用中,它使用0游标返回整个集合和下一个游标,下一个游标将返回多个元素,另一个游标将生成完全相同的结果和游标 下面的代码将在无限循环中运行 var cursor = 0L; do { var result = redis.SetScan("key", cursor: cursor, pageSize: 100); set.AddRange(result); cursor = ((IScannin
SetScan
调用中,它使用0游标返回整个集合和下一个游标,下一个游标将返回多个元素,另一个游标将生成完全相同的结果和游标
下面的代码将在无限循环中运行
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);
}
如果需要在中间停止枚举并在带外继续其他地方,则会显示游标。但是我仍然不明白为什么我的示例代码不能正常工作。所提供的代码是否有问题?如果返回的游标与传入的游标相同,则完成设置扫描。您不需要循环,因为第一次调用将始终返回所有元素,因为您不限制迭代器对结果的使用。set.AddRange(结果);将导致迭代器(result)进行获取整个集合所需的所有Redis调用。