Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Stackexchange Redis-如何获取大量分页记录_C#_Redis_Stackexchange.redis - Fatal编程技术网

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

C# Stackexchange Redis-如何获取大量分页记录,c#,redis,stackexchange.redis,C#,Redis,Stackexchange.redis,有没有办法把结果分页。我正在使用 Database.HashGetAll(GetKey(key)); 但是它抛出OutOfMemory异常。您可以使用HashScan方法在redis哈希上迭代 当您遍历结果集时,StackExchange.Redis将自动调用HSCAN,根据需要返回更多页面的结果。您可以选择使用pageSize参数来影响每次调用HSCAN返回的记录数 var hashEntries = database.HashScan(key); foreach (var entry

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

 Database.HashGetAll(GetKey(key));

但是它抛出OutOfMemory异常。

您可以使用
HashScan
方法在redis哈希上迭代

当您遍历结果集时,StackExchange.Redis将自动调用
HSCAN
,根据需要返回更多页面的结果。您可以选择使用
pageSize
参数来影响每次调用
HSCAN
返回的记录数

var hashEntries = database.HashScan(key);

foreach (var entry in hashEntries)
{
    // ...
}
在迭代过程中的任何时候,您都可以获得光标的当前值,这将允许您从相同的结果页面开始新的迭代

((IScanningCursor) hashEntries).Cursor
查看更多有关如何在引擎盖下工作的详细信息

每次扫描调用返回的元素数 扫描族函数不能保证元素的数量 每次调用返回的值在给定范围内。这些命令也是允许的 返回零元素,客户端不应考虑 只要返回的游标不为零,迭代就完成

计数选项 虽然SCAN不能保证每次迭代返回的元素数量,但是可以 使用COUNT选项根据经验调整扫描行为。 基本上,使用COUNT,用户指定了应完成的工作量 在每次调用时都要执行,以便从 收集然而,这只是对实现的一个提示 一般来说,这是你在大多数情况下都能预料到的 从实施开始

  • 默认计数值为10
  • 迭代密钥空间或集合、哈希或排序集时,假设没有匹配选项,则该集合、哈希或排序集足够大,可以由哈希表表示 使用时,服务器通常会返回count或略多于count 每个调用的元素
HashScan()
的概念令人困惑,而且不管现有的所有文档如何,仍然理解不足,过于复杂。我做了一个测试。我将1164个条目填充到一个散列中,并运行一个
hashEntries=database.HashScan(key,“*”,50)
。建议执行
foreach(hashEntries中的var条目)
将在一次传递中迭代1164个条目的整个哈希。在迭代过程中,如果我选择停止迭代并稍后继续,那么在请求的50个条目之后将发出一个新的游标。由于我没有这样做,问题变得非常简单:1)HashScan(),2)迭代,3)完成!