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)完成!