有没有办法让结果分页。我正在使用
Database.HashGetAll(GetKey(key));
来自Stackexchange.Redis .Net Client的但它会抛出OutOfMemory异常。
答案 0 :(得分:1)
您可以使用HashScan
方法迭代redis哈希。
当您遍历结果集时,StackExchange.Redis将自动调用HSCAN
以根据需要返回更多页面的结果。您可以选择使用pageSize
参数来影响每次调用HSCAN
时返回的记录数。
var hashEntries = database.HashScan(key);
foreach (var entry in hashEntries)
{
// ...
}
在迭代过程中的任何时候,您都可以获得光标的当前值,这样您就可以从同一页面的结果中开始新的迭代。
((IScanningCursor) hashEntries).Cursor
请查看http://redis.io/commands/scan,详细了解其工作原理。
每次SCAN调用时返回的元素数
SCAN族功能不保证元素的数量 每次通话返回的都在给定范围内。这些命令也是允许的 返回零元素,客户端不应该考虑 只要返回的游标不为零,迭代就完成。
COUNT选项
虽然SCAN不提供每次迭代返回的元素数量的保证,但是可以 使用COUNT选项凭经验调整SCAN的行为。 基本上使用COUNT,用户指定了应该的工作量 每次调用都要完成,以便从中检索元素 采集。然而,这只是实施的暗示 一般来说,这是大多数时候你可以期待的 从实施。
- 默认的COUNT值为10.
- 当迭代密钥空间或者大小足以由哈希表表示的Set,Hash或Sorted Set时,假设没有MATCH选项 如果使用,服务器通常会返回计数或多于计数 每次通话的元素。