我读到,为了连接到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文档:
那么,在我的ASP.net MVC应用程序中共享ConnectionMultiplexer的最佳实践是什么?它应该在Global中被称为。或者每个控制器初始化一次,或者等等。别的吗?到Azure Redis缓存的连接是由ConnectionMultiplexer类管理的。这个类被设计为在整个客户端应用程序中共享和重用,不需要在每个操作的基础上创建。
我也有一个服务,它的任务是与应用程序通信,所以如果我想与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;
}
}
}