Stackexchange Redis - 如何获取大量分页记录

时间:2016-05-12 20:45:02

标签: c# redis stackexchange.redis

有没有办法让结果分页。我正在使用

 Database.HashGetAll(GetKey(key));
来自Stackexchange.Redis .Net Client

但它会抛出OutOfMemory异常。

1 个答案:

答案 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选项   如果使用,服务器通常会返回计数或多于计数   每次通话的元素。
  •