stackexchange redis hashscan一次返回所有字段

gfttwv5a  于 2023-10-15  发布在  Redis
关注(0)|答案(2)|浏览(86)

我正在使用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是单线程应用程序。
谢谢你,谢谢

xkrw2x1b

xkrw2x1b1#

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

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

作为旁注:自定义迭代器实现了一个自定义接口,允许你拾取和恢复游标,* 如果你需要的话 *。

agxfikkp

agxfikkp2#

HashScan只在键匹配但模式不匹配的情况下工作,由于键数量巨大,解决方案在生产中不起作用。

return server.Keys(pattern: key + "*").Select(key => (string)key)

相关问题