C# 执行SETEX的Redis超时
我正在客户端服务器上使用StackExchange.Redis 1.2.6与windows服务器上安装的Redis server版本3.0.504连接。我在客户端服务器中遇到以下超时异常,导致应用程序不一致C# 执行SETEX的Redis超时,c#,redis,C#,Redis,我正在客户端服务器上使用StackExchange.Redis 1.2.6与windows服务器上安装的Redis server版本3.0.504连接。我在客户端服务器中遇到以下超时异常,导致应用程序不一致 private static ConfigurationOptions GetRedisClusterConfiguration() { ConfigurationOptions configuration = null; try { RedisConfigS
private static ConfigurationOptions GetRedisClusterConfiguration() {
ConfigurationOptions configuration = null;
try {
RedisConfigSection config = System.Configuration.ConfigurationManager.GetSection(RedisConfigSection.SECTION_NAME) as RedisConfigSection;
configuration = new ConfigurationOptions();
configuration.AbortOnConnectFail = false;
configuration.ConnectTimeout = 15000;
configuration.ConfigCheckSeconds = 60;
configuration.AllowAdmin = true;
configuration.ConnectRetry = 5;
if (!string.IsNullOrEmpty(config.Servers.Password)) configuration.Password = config.Servers.Password;
foreach(var server in config.Servers) {
configuration.EndPoints.Add($ "{server.Host}:{server.Port}");
}
}
catch(Exception ex) {
log.Error(ex);
}
return configuration;
}
public static ConnectionMultiplexer Instance {
get {
if (instance == null) {
lock(safetyLock) {
if (instance == null) {
try {
ConfigurationOptions configuration = GetRedisClusterConfiguration();
StringWriter loginfo = new StringWriter();
instance = ConnectionMultiplexer.Connect(configuration, loginfo);
if (instance != null && !instance.IsConnected) log.Info(loginfo.ToString());
}
catch(Exception ex) {
log.Error(ex);
}
}
}
}
return instance;
}
}
我的观察:
private static ConfigurationOptions GetRedisClusterConfiguration() {
ConfigurationOptions configuration = null;
try {
RedisConfigSection config = System.Configuration.ConfigurationManager.GetSection(RedisConfigSection.SECTION_NAME) as RedisConfigSection;
configuration = new ConfigurationOptions();
configuration.AbortOnConnectFail = false;
configuration.ConnectTimeout = 15000;
configuration.ConfigCheckSeconds = 60;
configuration.AllowAdmin = true;
configuration.ConnectRetry = 5;
if (!string.IsNullOrEmpty(config.Servers.Password)) configuration.Password = config.Servers.Password;
foreach(var server in config.Servers) {
configuration.EndPoints.Add($ "{server.Host}:{server.Port}");
}
}
catch(Exception ex) {
log.Error(ex);
}
return configuration;
}
public static ConnectionMultiplexer Instance {
get {
if (instance == null) {
lock(safetyLock) {
if (instance == null) {
try {
ConfigurationOptions configuration = GetRedisClusterConfiguration();
StringWriter loginfo = new StringWriter();
instance = ConnectionMultiplexer.Connect(configuration, loginfo);
if (instance != null && !instance.IsConnected) log.Info(loginfo.ToString());
}
catch(Exception ex) {
log.Error(ex);
}
}
}
}
return instance;
}
}
例外情况:
StackExchange.Redis.RedisTimeoutException:执行SETEX时超时
vuprodgenericgenevaservice_executormsg_日内瓦平行生产线,inst:1,
经理:执行选择,错误:从不,队列:3,qu:0,qs:3,qc:0,wr:0,
wq:0,in:0,ar:0,客户端名称:xxxx,服务器端点:
未指定/xxxx:6379,密钥哈希槽:3134,IOCP:
(忙=0,空闲=1000,最小=8,最大=1000),工作者:
(忙=78,闲=1969,最小=8,最大=2047)(请看这篇文章
对于一些可能导致超时的常见客户端问题:
)
你试过这样的东西吗
configuration.SyncTimeout = 15000;