我们需要在StackExchange.Redis中使用多个客户端名称,据我所知,这意味着多个连接字符串和ConnectionMultiplexer的多个(静态)实例。

我当前的想法是创建一个静态包装器类,并使用一个以客户端名称(或整个连接字符串)为键的私有字典来存储多路复用器实例,并公开一个查询多路复用器的GetDatabase(name)方法(或锁定并创建)它)并将实例上GetDatabase()调用的结果返回给调用者。

这是我想到的第一件事,但是如果有更好的方法来处理此要求,我不会感到惊讶。

最佳答案

过去我遇到过同样的情况,我需要根据配置动态更改连接。为了克服这个问题,我创建了静态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连接动态化,以便我们可以基于此执行其他操作,例如设置和获取键和值。

关于c# - 具有多个客户端名称的StackExchange.Redis,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52323874/

10-12 12:49
查看更多