【问题标题】:stackexchange redis hashscan return all fields in one timestackexchange redis hashscan一次返回所有字段
【发布时间】:2016-07-27 22:23:30
【问题描述】:

我在 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是单线程应用。

谢谢!

【问题讨论】:

    标签: c# redis stackexchange.redis


    【解决方案1】:

    它并没有像你想象的那样做。这里的HashScan方法返回一个自定义的迭代器,最多维护2页数据;当您接近一页的末尾时,它会自动获取下一页。那么,本质上,如果您只想阅读 20 条内容,只需阅读 20 条内容。例如,LINQ .Take(20) 可以正常工作。如果你在迭代器上调用.ToList(),那么是的:它会从一端走到另一端,根据需要动态获取数据。所以:不要那样做 :)

    做的事情:

    • 在对 redis 的一次巨大调用中获取所有数据
    • HashScan 方法返回之前对 redis 执行大量小调用

    附带说明:自定义迭代器实现了一个自定义接口,以允许您拾取和恢复光标,如果您需要的话

    【讨论】:

      猜你喜欢
      • 2017-05-06
      • 1970-01-01
      • 2020-05-06
      • 2022-01-12
      • 2021-02-05
      • 1970-01-01
      • 1970-01-01
      • 2017-08-01
      • 2020-02-15
      相关资源
      最近更新 更多