我在C#中使用stackexchange.redis SDK,并希望扫描我的哈希集。 我期望SDK作为redis客户端执行(当我执行" hscan myKey 0"时,它将返回几个键值对,以及我将用于下一次扫描的光标)。但是当我使用stackexchange.redis SDK实现" hashscan"方法如下:
redisCache.HashScan(myKey, pageSize:10, cursor: 0)
它将返回" myKey"中的所有字段,其中有2,000个键值对。 我怎么能让它一次只返回几个结果呢?
原因将来," myKey"中会有数百万个字段,如果它们一次全部返回,它会花费大量内存,是否会阻止在线服务?因为redis是单线程应用程序。
谢谢!
答案 0 :(得分:3)
它没有做你认为它正在做的事情。这里的HashScan
方法返回一个自定义迭代器,它最多可以保存2页数据;当你接近一页的末尾时,它会自动获取下一页。基本上,如果您只想阅读20个项目,只需阅读20个项目。例如,LINQ .Take(20)
可以正常工作。如果在迭代器上调用.ToList()
,则为:它将从一端走到另一端,根据需要动态获取数据。所以:不要那样做:)
不的事情:
作为旁注:自定义迭代器实现了一个自定义接口,允许您接收和恢复游标,如果需要。