stackexchange redis hashscan可以一次返回所有字段

时间:2016-04-07 07:25:00

标签: 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"中的所有字段,其中有2,000个键值对。 我怎么能让它一次只返回几个结果呢?

原因将来," myKey"中会有数百万个字段,如果它们一次全部返回,它会花费大量内存,是否会阻止在线服务?因为redis是单线程应用程序。

谢谢!

1 个答案:

答案 0 :(得分:3)

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

的事情:

  • 在一次大规模的redis调用中获取所有数据
  • 从<{1}}方法
  • 返回>之前,对redis 执行大量小调用

作为旁注:自定义迭代器实现了一个自定义接口,允许您接收和恢复游标,如果需要