我正在尝试使用TWEMPROXY服务器的IP地址使用StackExchange redis执行下面的C#代码,并在下面给出错误:
未处理的类型异常 ' StackExchange.Redis.RedisConnectionException'发生在 StackExchange.Redis.dll
其他信息:无法连接到redis 服务器(一个或多个);要创建断开的多路复用器,请禁用 AbortOnConnectFail。 PING上的SocketFailure
但是,当我使用本地主机时,它可以正常工作并将数据存储在本地Redis缓存
中使用' localhost'的代码示例如下:
using System;
namespace WinRedis
{
class MainClass
{
public static void Main (string[] args)
{
new MainClass().testingCache();
Console.ReadLine();
}
public void testingCache()
{
SimpleCache<User> cache = new RedisCache<User>("mycache", "localhost:6379");
cache.Put ("user1", new User () { Name = "test", Email = "test@email.com", Password = "secured" });
User user = cache.Get("user1");
Console.WriteLine(user);
}
}
[Serializable]
class User{
public string Name { set; get; }
public string Email { set; get; }
public string Password {set;get;}
public override string ToString()
{
return "User(Name: " + Name + ", Email: " + Email + ", Password: " + Password + ")";
}
}
}
using System;
using StackExchange.Redis;
namespace WinRedis
{
public class RedisCache<T> : SimpleCache<T>
{
private ConnectionMultiplexer redisConnection = null;
private IDatabase redis = null;
private string name = null;
public RedisCache(string name = "redis-cache",
string connectionOptions = "localhost:6379")
{
this.redisConnection = ConnectionMultiplexer.Connect(connectionOptions);
this.redis = redisConnection.GetDatabase ();
this.name = name;
}
public T Get(string key)
{
byte[] result = this.redis.HashGet (name, key);
if (result == null)
return default(T);
else
return result.Deserialize<T>();
}
public void Put(string key, T value)
{
this.redis.HashSet (name, key, value.SerializeToByteArray() );
}
public void Close()
{
this.redisConnection.Close ();
}
}
}
对于上面相同的代码,当我用TWEMPROXY IP地址替换localhost时,它会出错。
答案 0 :(得分:1)
https://github.com/StackExchange/StackExchange.Redis/blob/master/Docs/Configuration.md#twemproxy
建议也许这样的事情可能有用......也许
IVsDataConnectionsService service = (IVsDataConnectionsService)Package.GetGlobalService(typeof(IVsDataConnectionsService));
for (int i = 0; i < service.Count; i++)
{
IVsDataExplorerConnection conn = service.GetConnectionHierarchy(i) as IVsDataExplorerConnection;
//Do what you need - possible check conn.Connection.State
//Subscribe to connection state changed
conn.Connection.StateChanged += ConnectionStateChanged;
}