连接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
相关产品推荐
相关产品推荐

