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

StackExchange.Redis调用GetDatabase()失败,无法连接Redis服务器

解决StackExchange.Redis连接报错:无法连接到Redis服务器

问题场景

以下是我编写的Redis客户端代码:

using StackExchange.Redis;

namespace Redis
{
    public class Client
    {
        public static readonly ConnectionMultiplexer redis = ConnectionMultiplexer.Connect(new ConfigurationOptions()
            {
                EndPoints = { "localhost" }
            }
        );

        public static double Ping()
        {
            var db = redis.GetDatabase();
            var ping = db.Ping();

            return ping.TotalMilliseconds;
        }
    }
}

调用redis.GetDatabase()时,持续报错:"It was not possible to connect to the redis server(s) right now"(当前无法连接到Redis服务器)。

排查与解决步骤

  • 确认Redis服务是否正常运行
    打开命令行(Windows用PowerShell/cmd,Linux用终端)执行redis-cli ping,返回PONG说明服务正常;若无法连接,先启动Redis服务:

    • Windows:找到Redis安装目录运行redis-server.exe,或通过services.msc找到Redis服务并启动。
    • Linux:执行sudo systemctl start redis,或直接启动redis-server。
  • 检查连接配置准确性

    • 默认Redis端口为6379,若修改过端口,需在EndPoints中指定,比如EndPoints = { "localhost:6380" }。
    • 若Redis设置了密码,要在ConfigurationOptions中添加Password = "你的密码"。
    • 排查防火墙/安全软件是否拦截6379端口,本地测试可临时关闭防火墙验证,确认问题后再添加端口放行规则。
  • 优化ConnectionMultiplexer初始化逻辑
    ConnectionMultiplexer是线程安全的全局复用组件,直接在静态构造时连接可能因服务未就绪或无重试导致失败,建议改成延迟初始化+异常重试:

using StackExchange.Redis;
using System;

namespace Redis
{
public class Client
{
private static ConnectionMultiplexer _redis;
private static readonly object _lockObj = new object();

public static ConnectionMultiplexer Redis
    {
        get
        {
            if (_redis == null || !_redis.IsConnected)
            {
                lock (_lockObj)
                {
                    if (_redis == null || !_redis.IsConnected)
                    {
                        try
                        {
                            _redis = ConnectionMultiplexer.Connect(new ConfigurationOptions()
                            {
                                EndPoints = { "localhost" },
                                ConnectRetry = 3,
                                ConnectTimeout = 5000
                            });
                        }
                        catch (Exception ex)
                        {
                            // 可添加日志记录逻辑
                            throw new Exception("Redis连接初始化失败", ex);
                        }
                    }
                }
            }
            return _redis;
        }
    }

    public static double Ping()
    {
        var db = Redis.GetDatabase();
        var ping = db.Ping();
        return ping.TotalMilliseconds;
    }
}

}

- **查看Redis日志定位细节**
Redis日志会记录连接失败的具体原因(如密码错误、端口占用、连接数超限等),Windows日志一般在安装目录的`redis-server.log`,Linux日志在`/var/log/redis/redis-server.log`,根据日志信息针对性修复。

内容的提问来源于stack exchange,提问作者iKingNinja
相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 00:47:20