Azure Redis StackExchange.Redis ConnectionMultiplexer в 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:

Подключение к кэшу Redis для Azure управляется классом ConnectionMultiplexer. Этот класс предназначен для совместного использования и повторного использования в вашем клиентском приложении, и его не нужно создавать для каждой операции.

Итак, как лучше всего использовать ConnectionMultiplexer в моем приложении ASP.net MVC? Должен ли он вызываться в Global.asax, или я должен инициализировать его один раз для каждого контроллера, или что-то в этом роде. еще ?

Также у меня есть служба, которой поручено общаться с приложением, поэтому, если я хочу общаться с Redis внутри службы, должен ли я отправить экземпляр ConnectionMultiplexer службе из контроллеров, или я должен инициализировать его во всех своих службах, или?

Как видите, я здесь немного заблудился, поэтому, пожалуйста, помогите!


person hyperN    schedule 11.09.2015    source источник


Ответы (2)


Документы правы в том, что у вас должен быть только один экземпляр ConnectionMultiplexer и использовать его повторно. Не создавайте более одного, рекомендуется, чтобы это было опубликовано и использовано повторно.

Теперь о части создания, ее не должно быть в Controller или Global.asax. Обычно у вас должен быть свой собственный класс RedisCacheClient (возможно, реализующий какой-либо интерфейс ICache), который использует внутри закрытый статический экземпляр ConnectionMultiplexer, и именно там должен быть ваш код создания - точно так, как вы написали в своем вопросе. Часть Lazy отложит создание ConnectionMultiplexer до его первого использования.

person Liviu Costea    schedule 11.09.2015

Дорогие;

Вы можете повторно использовать 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;
        }
    }
}
person Muhammad Makhaly    schedule 16.10.2016
comment
как использовать его с RedisCacheClient? - person Neo; 13.10.2020