Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# stackexchange redis hashscan一次返回所有字段_C#_Redis_Stackexchange.redis - Fatal编程技术网

C# stackexchange redis hashscan一次返回所有字段

C# stackexchange redis hashscan一次返回所有字段,c#,redis,stackexchange.redis,C#,Redis,Stackexchange.redis,我正在C#中使用stackexchange.redis SDK,希望扫描我的哈希集。 我希望SDK作为redis客户端执行(当我执行“hscan myKey 0”时,它将返回几个键值对,并返回一个游标,我将用于下一次扫描)。但当我使用stackexchange.redis SDK实现“hashscan”方法时,如下所示: redisCache.HashScan(myKey, pageSize:10, cursor: 0) 它将返回“myKey”中的所有字段,其中有2000个键值对。 我怎么能让

我正在C#中使用stackexchange.redis SDK,希望扫描我的哈希集。 我希望SDK作为redis客户端执行(当我执行“hscan myKey 0”时,它将返回几个键值对,并返回一个游标,我将用于下一次扫描)。但当我使用stackexchange.redis SDK实现“hashscan”方法时,如下所示:

redisCache.HashScan(myKey, pageSize:10, cursor: 0)
它将返回“myKey”中的所有字段,其中有2000个键值对。 我怎么能让它一次只返回几个结果呢

因为在未来,“我的钥匙”中会有数百万个字段,如果它们都一次性返回,会消耗大量内存,还会阻止在线服务吗?因为redis是单线程应用程序


谢谢

它并不像你想象的那样。这里的
HashScan
方法返回一个自定义迭代器,该迭代器最多保存2页数据;当您接近一页的末尾时,它会自动获取下一页。基本上,如果你只想读20个项目,只要读20个项目就行了。例如,LINQs
.Take(20)
可以正常工作。如果您在迭代器上调用
.ToList()
,则是:它将从一端走到另一端,根据需要动态获取数据。所以:不要这样做:)

它做不到的事情:

  • 在一次对redis的巨大调用中获取所有数据
  • 在从
    HashScan
    方法返回之前,执行大量对redis的小调用
附带说明:自定义迭代器实现了一个自定义接口,允许您选择并恢复游标(如果需要)