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

连接Redis内存数据库时出现RedisConnectionException错误求助

Redis连接异常排查(StackExchange.Redis.RedisConnectionException)

问题背景

功能开发完成时可正常运行,现在连接Redis(2.6.86版本)时抛出StackExchange.Redis.RedisConnectionException异常,错误发生在ConnectionMultiplexer.Connect(options)行,导致无法到达控制器端点。使用框架为ASP.NET Core 8。

相关代码与配置

服务注入代码

// 添加Redis连接(必须注册为Singleton,供所有用户共享)
services.AddSingleton<IConnectionMultiplexer>(opt =>
{
    string redisConnectionString = config.GetConnectionString("Redis");
    var options = ConfigurationOptions.Parse(redisConnectionString);
 
    // 错误发生在这一行
    return ConnectionMultiplexer.Connect(options);
});

appsettings.json配置

"ConnectionStrings": {
   "DefaultConnection": "Data source=skinet.db",
   "IdentityConnection": "Data source=identity.db",
   "Redis": "localhost"
 },

仓储类代码

public class BasketRepository : IBasketRepository
 {
     private readonly IDatabase _database;

     public BasketRepository(IConnectionMultiplexer redis)
     {
         _database = redis.GetDatabase();
     }

     public async Task<bool> DeleteBasketAsync(string basketId)
     {
         return await _database.KeyDeleteAsync(basketId);
     }

     public async Task<CustomerBasket?> GetBasketAsync(string basketId)
     {
         var data = await _database.StringGetAsync(basketId);

         return data.IsNullOrEmpty ? null : JsonSerializer.Deserialize<CustomerBasket>(data!);
     }

     public async Task<CustomerBasket?> UpsertBasketAsync(CustomerBasket basket)
     {
         // 内存中存在则替换,不存在则创建
         var created = await _database.StringSetAsync(basket.Id, JsonSerializer.Serialize(basket), TimeSpan.FromDays(30));

         if (!created) 
             return null;

         return await GetBasketAsync(basket.Id);
     }
 }

排查与解决方向

  • 检查Redis服务状态:打开命令行执行redis-cli ping,返回PONG说明服务正常,否则启动Redis服务;用netstat -ano | findstr :6379确认默认端口6379未被其他进程占用。
  • 优化连接字符串:显式指定端口和超时参数,修改为localhost:6379,connectTimeout=5000,syncTimeout=5000;开启调试日志,添加options.Log = LogSeverity.Debug;查看连接细节。
  • 验证版本兼容性:检查StackExchange.Redis包版本是否适配Redis 2.6.86与ASP.NET Core 8,建议升级到2.7.x及以上稳定版本。
  • 排查网络限制:确认本地防火墙未拦截6379端口,可临时关闭防火墙测试连接。
  • 添加重试机制:为连接配置重试策略,避免单次连接失败导致应用启动异常:
    options.ConnectRetry = 3;
    options.ReconnectRetryPolicy = new ExponentialRetry(TimeSpan.FromSeconds(1));
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 00:56:28