我正在使用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是单线程应用程序。
谢谢你,谢谢
2条答案
按热度按时间xkrw2x1b1#
它并没有像你想象的那样工作。这里的
HashScan
方法返回一个自定义迭代器,它最多维护2页数据;当你接近一页的结尾时,它会自动抓取下一页。如果你只想读20条,*就读20条吧。例如,LINQs.Take(20)
可以正常工作。如果在迭代器上调用.ToList()
,则是:它将从一端走到另一端,根据需要动态地获取数据。所以: 不要这样做 *:)它不做的事情:
HashScan
方法返回之前,对redis执行大量的小调用作为旁注:自定义迭代器实现了一个自定义接口,允许你拾取和恢复游标,* 如果你需要的话 *。
agxfikkp2#
HashScan
只在键匹配但模式不匹配的情况下工作,由于键数量巨大,解决方案在生产中不起作用。