簡體   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