我们需要在StackExchange.Redis中使用多个客户端名称,据我所知,这意味着多个连接字符串和ConnectionMultiplexer
的多个(静态)实例。
我目前的想法是创建一个静态包装器类,并使用一个以客户端名称(或整个连接字符串)为键的私有字典来存储多路复用器实例,并公开一个查询多路复用器的GetDatabase(name)
方法(或锁定并创建它),然后将实例上的GetDatabase()
调用的结果返回给调用者。
这是我首先想到的,但是如果有更好的方法来处理此要求,我不会感到惊讶。
答案 0 :(得分:1)
过去,我面临着相同的情况,我需要根据配置动态更改连接。为了解决这个问题,我创建了静态Helper
类,该类将端点IP地址作为输入并返回连接作为结果。
/// <summary>
/// Helper class for connection with Redis Server.
/// </summary>
public static class Helper
{
/// <summary>
/// Configuration option to connect with Redis.
/// </summary>
private static Lazy<ConfigurationOptions> configOptions(string ipAddress)
{
var configOptions = new ConfigurationOptions();
configOptions.EndPoints.Add(ipAddress);
/*
...Other Configurations...
*/
return new Lazy<ConfigurationOptions>(() => configOptions);
}
private static Lazy<ConnectionMultiplexer> lazyConnection(string ipAddress)
{
return new Lazy<ConnectionMultiplexer>(() => ConnectionMultiplexer.Connect(configOptions(ipAddress).Value));
}
/// <summary>
/// Connection property to connect Redis.
/// </summary>
public static ConnectionMultiplexer Connection(string ipAddress)
{
return lazyConnection(ipAddress).Value;
}
}
如何使用它:
var database = Helper.Connection("Your IP address").GetDatabase(0);
这是简单的解决方法,当然,您可以根据需要对其进行修改并使其更具可配置性。这里的想法是使Redis连接动态化,以便我们可以基于此执行其他操作,例如设置和获取键和值。