繁体   English   中英

ASP.net MVC中的Azure Redis StackExchange.Redis ConnectionMultiplexer

[英]Azure Redis StackExchange.Redis ConnectionMultiplexer in ASP.net MVC

我已经读过,为了连接到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.asax中调用,还是应该每个Controller初始化一次,或者smth。 别的?

我也有服务,负责与应用程序通信,所以如果我想在服务内部与Redis通信,我应该将ControlMultiplexer的实例发送到控制器的服务,还是应该在我的所有服务中初始化它,或者?

你可以看到我在这里有点迷失,所以请帮忙!

文档是正确的,你应该只有一个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;
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM