问题描述
我正在尝试从C#连接REdis数据库(GCP-memorystore-Redis)。将值设置为Redis时,出现类似以下的异常:
没有可用的连接服务。无法在 10.0.0.2 : 6379 / 交互式上进行连接,正在初始化,最后一次:无,起源:BeginConnectAsync,未完成:0,最后读取:10s前一次,最后一次写入:10年前,未回答:115年前,保持活动状态:180s,状态:正在连接,mgr:10(共10)可用,最后一次心跳:从不,全局:0s之前,v: 2.0 .519.65453 ; IOCP:(忙= 0,空闲= 1000,最小值= 1,最大值= 1000),工作人员:(忙= 1,空闲= 32766,最小值= 1,最大值= 32767),本地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");
请帮忙。
解决方法
似乎ConnectionMultiplexer连接字符串中的变量“主机”不正确。查看您的异常“在IPAddress:6379 / Interactive上的UnableToConnect”。因此,您的变量“端口”是正确的,其值为6379。也许您将“主机”变量转换为字符串的错误。因此,其中包含类型的变量(IPAddress)而不是实际值。
,看起来可能主要是格式/串联问题,在这种情况下,最简单的方法是:请勿这样做。有一个强类型的对象模型,很难出错:
var config = new ConfigurationOptions {
EndPoints = {
new DnsEndPoint(host,port),// new IPEndPoint(host,// <== or this if 'host' is an IPAddress
},ResolveDns = true,AbortOnConnectFail = false,KeepAlive = 180,ConnectTimeout = 10000,};
var muxer = ConnectionMultiplexer.Connect(config);
在内部,如果您给它一个string
,它要做的第一件事就是解析string
以创建上面的代码,因此您也可以直接使用它!