1

我正在尝试从 C# 连接 REDIS 数据库(GCP-memorystore-Redis)。在为 Redis 设置值时,我遇到了如下异常:

没有可用于服务此操作的连接。UnableToConnect on 10.0.0.2 : 6379 / Interactive , Initializing, last: NONE, origin: BeginConnectAsync, 未完成: 0, last-read: 10s ago, last-write: 10s ago, unanswered-write: 115s ago, keep-alive: 180s ,状态:正在连接,管理器:10 个可用,10 个可用,最后一次心跳:从不,全局:0 秒前,v:2.0.519.65453;IOCP: (Busy=0,Free=1000,Min=1,Max=1000), WORKER: (Busy=1,Free=32766,Min=1,Max=32767), Local-CPU: n/a

我正在使用StackExchange.Redis版本: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");

你能帮忙吗?

4

2 回答 2

1

ConnectionMultiplexer 连接字符串中的变量“主机”似乎不正确。查看您的异常“IPAddress:6379/Interactive 上的 UnableToConnect”。所以你的变量“端口”是正确的,它的值是 6379。也许你的“主机”变量到字符串的转换是错误的。所以你有变量类型(IPAddress)而不是实际值。

于 2020-10-29T12:41:51.427 回答
1

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

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);

在内部,如果你给它 a string,它要做的第一件事就是解析string以创建上面的内容,所以你不妨直接去!

于 2020-10-29T12:46:38.623 回答