redis - StackExchange.Redis SetScan 返回所有集合成员

标签 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);

改变页面大小不会产生影响。

最佳答案

如果您迭代结果,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/

相关文章:

java - 如何使用 Hector 在 Cassandra 中保留新的客户行?

sql - MongoDB : few questions

具有 2 个应用程序服务器和 1 个附加 Sentinel 节点设置的 Redis Sentinel

caching - Redis内存管理-基于key、数据库或实例清除

spring-boot - 如何为 Spring Session 提供的 RedisMessageListenerContainer 配置额外的 MessageListener?

c# - 大量请求时 StackExchange.Redis 超时

c# - StackExchange.ConnectionMultiplexer.GetServer 不工作

elasticsearch - 如何在ElasticSearch中建立社交关系模型?

linux - Redis "--protected-mode no"磁盘上没有持久数据

database - 具有主/从结构的 Redis Multitenency?