You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中更新Redis SCAN的游标值?

解决Redis SCAN游标更新问题

你的代码核心问题是:当前调用的Keys重载不会返回SCAN命令生成的新游标值,导致cursor变量始终保持初始的0,要么陷入无限循环,要么根本没遍历完所有键。

StackExchange.Redis提供了带out参数的Keys重载,专门用来获取SCAN返回的游标更新值。修改后的代码如下:

public int Count()
{
    var server = _conn.GetServer(_conn.GetEndPoints().First());
    int count = 0;
    var cursor = 0L;
    do
    {
        // 使用带out参数的Keys重载,每次调用后cursor会被更新为SCAN返回的新游标
        var keys = server.Keys(out cursor, pattern: GetPattern(), pageSize: batchSize);
        count += keys.Count();
    } while (cursor != 0); // 当游标返回0时,说明遍历完成

    return count;
}

关键说明

  • 调用server.Keys(out cursor, ...)时,方法会通过out参数将SCAN命令返回的新游标值赋值给cursor变量
  • 每次循环都会用更新后的游标继续遍历下一批键,直到游标返回0,代表所有键已遍历完成
  • 这样就能正确基于SCAN的分页遍历逻辑,统计出Redis中符合模式的总键数

内容的提问来源于stack exchange,提问作者ANEES

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 03:39:55