Azure Redis StackExchange.Redis ConnectionMultiplexer in ASP



我读到,为了连接到Azure Redis缓存是最好遵循这种做法:

private static ConnectionMultiplexer Connection { get { return LazyConnection.Value; } }
    private static readonly Lazy<ConnectionMultiplexer> LazyConnection =
        new Lazy<ConnectionMultiplexer>(
            () =>
            {
                return
                    ConnectionMultiplexer.Connect(connStinrg);
            });

根据Azure Redis文档:

到Azure Redis缓存的连接是由ConnectionMultiplexer类管理的。这个类被设计为在整个客户端应用程序中共享和重用,不需要在每个操作的基础上创建。

那么,在我的ASP.net MVC应用程序中共享ConnectionMultiplexer的最佳实践是什么?它应该在Global中被称为。或者每个控制器初始化一次,或者等等。别的吗?

我也有一个服务,它的任务是与应用程序通信,所以如果我想与Redis内部的服务通信,我应该发送ConnectionMultiplexer的实例从控制器服务,或者我应该初始化它在我所有的服务,还是?

正如你所看到的,我有点迷路了,所以请帮助!

文档是正确的,因为您应该只有一个ConnectionMultiplexer实例并重用它。不要创建多个,建议将其共享和重用。

现在对于创建部分,它不应该在Controller或Global.asax中。通常情况下,你应该有自己的RedisCacheClient类(可能实现一些ICache接口),使用ConnectionMultiplexer内部私有静态实例,这就是你的创建代码应该在哪里-就像你在你的问题中写的那样。Lazy部分将延迟ConnectionMultiplexer的创建,直到第一次使用它。

亲爱的;

你可以重用StackExchange。Redis ConnectionMultiplexer使用以下代码。它可以在代码的任何层中使用。

public class RedisSharedConnection
{
    private static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() =>
    {
        ConnectionMultiplexer connectionMultiplexer = ConnectionMultiplexer.Connect(ConfigurationManager.ConnectionStrings["RedisConnectionString"].ConnectionString);
        connectionMultiplexer.PreserveAsyncOrder = false;
        return connectionMultiplexer;
    });
    public static ConnectionMultiplexer Connection
    {
        get
        {
            return lazyConnection.Value;
        }
    }
}

最新更新