8

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

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

如您所见,我在这里有点迷路,所以请帮忙!

4

2 回答 2

7

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

现在对于创建部分,它不应该在 Controller 或 Global.asax 中。通常,您应该拥有自己的 RedisCacheClient 类(可能实现一些 ICache 接口),该类在内部使用 ConnectionMultiplexer 私有静态实例,这就是您的创建代码应该位于的位置-与您在问题中所写的完全一样。Lazy部分会将 ConnectionMultiplexer的创建推迟到第一次使用。

于 2015-09-11T14:15:14.287 回答
1

亲爱的;

您可以使用以下代码重用 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;
        }
    }
}
于 2016-10-16T14:18:21.687 回答