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

Azure Redis如何使用模式匹配实现Key通配符查询?

在C# .NET Core中用SCAN实现Azure Redis的Key通配符查询

核心思路

StackExchange.Redis(.NET Core连接Azure Redis的主流库)中,Key的SCAN操作需要通过IServer对象执行,而非IDatabase接口。IServer.Scan方法封装了Redis原生的SCAN命令,支持增量式扫描(避免阻塞Redis),且直接兼容你需要的*CID_123*BID_333*这类glob模式通配符。

具体实现步骤及代码

  1. 获取Redis连接实例
    确保你已经初始化了ConnectionMultiplexer(连接Azure Redis的核心对象):

    // 从配置中读取Azure Redis连接字符串
    var connectionString = "your-azure-redis-connection-string";
    var multiplexer = ConnectionMultiplexer.Connect(connectionString);
    
  2. 获取Redis服务器对象
    通过连接实例获取对应Redis服务器的引用:

    // 获取Azure Redis的端点(默认取第一个即可)
    var endPoint = multiplexer.GetEndPoints().First();
    var server = multiplexer.GetServer(endPoint);
    
  3. 执行SCAN扫描匹配Key
    循环执行SCAN直到游标返回0(表示扫描完成),收集所有匹配的Key:

    // 定义你的通配符模式
    var keyPattern = "*CID_123*BID_333*";
    long cursor = 0;
    var matchingKeys = new List<RedisKey>();
    
    do
    {
        // 执行扫描,pageSize可根据实际场景调整(建议1000-5000,平衡性能和次数)
        var scanResult = server.Scan(
            cursor: cursor,
            pattern: keyPattern,
            pageSize: 1000
            // 若需指定非默认数据库,添加参数database: 你的数据库编号
        );
        
        cursor = scanResult.Cursor;
        matchingKeys.AddRange(scanResult.Items);
    } while (cursor != 0);
    
    // 处理匹配到的Key
    foreach (var key in matchingKeys)
    {
        // 示例:输出Key或执行后续操作
        Console.WriteLine($"匹配到Key: {key}");
    }
    

关键注意事项

  • 避免使用KEYS命令:KEYS会全量遍历Redis所有Key,严重阻塞服务,SCAN是增量式扫描,生产环境必须用SCAN。
  • 通配符规则:Redis的glob模式完全支持你的需求:*匹配任意长度字符,?匹配单个字符,[]匹配指定范围字符。
  • 性能优化:pageSize不要设置过大(比如超过10000),避免单次返回数据量过大导致网络或Redis压力;也不要过小,增加循环次数。
  • 数据库指定:如果你的Key存储在非默认数据库(db0),需要在Scan方法中指定database参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:35:26