stackexchange.redis:没有可用于服务此操作的连接无法连接host:port/interactive

pes8fvy9  于 2021-06-09  发布在  Redis
关注(0)|答案(2)|浏览(664)

我正在尝试从c#连接redis数据库(gcp memorystore redis)。在将值设置为redis时,会出现如下异常:
没有可用于服务此操作的连接。无法连接10.0.0.2:6379/交互式,初始化,最后:无,源:beginconnectasync,未完成:0,最后读取:10秒前,最后写入:10秒前,未应答写入:115秒前,保持活动:180秒,状态:正在连接,管理器:10个可用,最后心跳:从不,全局:0秒前,v:2.0.519.65453;iocp:(忙=0,空闲=1000,最小=1,最大=1000),工作线程:(忙=1,空闲=32766,最小=1,最大=32767),本地cpu:不适用
我正在使用stackexchange.redisversion:2.0.519
代码:

IDatabase redisDB;
                try {
                    ConnectionMultiplexer redis = ConnectionMultiplexer.Connect($"{host}:{port},resolvedns=1,abortConnect=False,keepAlive=180,connectTimeout=10000");

                    redisDB = redis.GetDatabase();

                    if(redisDB==null)
                    {
                   **//Getting Error**
                      var messageId = redisDB.StreamAdd("event_stream", "foo_name", "bar_value");
                     //redisDB.StringSet("RedisKey", "RedisValue");
                    }
                  }

(或者)我也尝试使用下面的代码来设置值(获得相同的问题)

redisDB.StringSet("RedisKey", "RedisValue");

你能帮个忙吗。

vdzxcuhz

vdzxcuhz1#

看起来这可能主要是一个格式化/连接问题,在这种情况下,最简单的方法是:不要这样做。有一种强类型的对象模型很难出错:

var config = new ConfigurationOptions {
    EndPoints = {
        new DnsEndPoint(host, port),
        // new IPEndPoint(host, port), // <== or this if 'host' is an IPAddress
    },
    ResolveDns = true,
    AbortOnConnectFail = false,
    KeepAlive = 180,
    ConnectTimeout = 10000,
};
var muxer = ConnectionMultiplexer.Connect(config);

在内部,如果你给它一个 string ,它要做的第一件事就是解析 string 要准确地创建上面的内容,那么您最好直接创建!

kh212irz

kh212irz2#

似乎connectionmultiplexer connectionstring中的变量“host”不正确。看看你的异常“无法连接”ipaddress:6379/interactive". 所以变量“port”是正确的,它的值是6379。也许您的“主机”变量到字符串的转换是错误的。所以在它里面有变量类型(ipaddress)而不是实值。

相关问题