1

我正在使用 SortedSetScan 过滤一些数据,我的代码如下:

db.SortedSetScan("SR.Cache.APP:Termial1", "A*", 50, CommandFlags.None);

但是页面大小总是不起作用,结果计数总是全部。我的代码有什么问题?或者它是一个错误?

有人可以帮助我吗,谢谢!

4

1 回答 1

2

是的,结果总是“全部”。ZSCAN发出底层命令时,页面大小只会影响往返次数,而不是每次调用的数据量。IEnumerable<T>但是,它是惰性的,等等,所以如果您只想要前 50 个项目,请使用:

db.SortedSetScan(...).Take(50)

相反,它将执行它需要的任何操作以获得 50 个项目。调整页面大小只会改变需要多少操作。认为“我将页面大小设为 50,因此只需要一次操作”是不正确的——它不是那样工作的;无论页面大小如何, redis*SCAN命令都可以返回空页面或包含一个或两个项目的页面。页面大小更多的是对 redis 的“放弃本次迭代之前要看多少东西”的指导。这在redisSCAN文档中有更完整的描述- 特别是,请阅读它关于“计数选项”的内容。

请注意,从所有 SE.Redis 扫描操作中获得的序列可以在稍后通过将IEnumerable<T>orIEnumerator<T>转换为来恢复IScanningCursor,并获取光标详细信息以作为参数提供。

您可能还想考虑“范围”方法是否更合适(注意:它们不允许模式过滤器)。

于 2014-11-14T09:47:02.010 回答