ASP.NET Поставщик кэша вывода для Redis не сохраняет

#asp.net-mvc #redis #outputcache

#asp.net-mvc #redis #выходной кэш #outputcache

Вопрос:

Я не уверен, как устранить это, но я пытаюсь реализовать ASP.NET Кэш вывода через поставщика кэша вывода Redis.

У нас настроен сервер Redis (не azure), и я могу хранить кэш для общего использования. Однако, когда я пытаюсь настроить ASP.NET кэш вывода, похоже, он ничего не сохраняет в кеш!

Я установил Microsoft.Web.RedisOutputCacheProvider через Nuget. Web.Config настраивается следующим образом:

 <caching>
      <outputCache defaultProvider="MyRedisOutputCache">
        <providers>
          <add name="MyRedisOutputCache" type="Microsoft.Web.Redis.RedisOutputCacheProvider" host="ServerName" port="6464" accessKey="PasswordToRedis" />
        </providers>
      </outputCache>
</caching>
  

Контроллер MVC настроен с атрибутом OutputCache:

 [OutputCache(Duration = 3600, VaryByParam = "*", Location = OutputCacheLocation.ServerAndClient)]
        public JsonResult GetLookupData()
  

Когда я проверяю Redis, я не вижу, что какой-либо OutputCache сохраняется.

Я что-то упускаю? Есть ли способ отладить, почему он ничего не хранит в кэше?

Комментарии:

1. Проверьте это learn.microsoft.com/en-us/azure/azure-cache-for-redis / … работает ли команда cache PING из вашего веб-приложения?

2. Я должен упомянуть, что ни приложение, ни серверы кэша не находятся в Azure. Ни один не хранит. Кроме того, я могу использовать кэш Redis, используя обычный метод кэширования в коде. Однако, если я решу использовать OutputCacheProvider для кэширования вывода, я ничего не сохраню.

3. Можете ли вы попробовать изменить свой web.config в соответствии с этим сообщением? github.com/moonpyk/mvcdonutcaching/issues/35

4. Я пробовал это с дополнительным параметром в type, и он все еще не работает. Ошибок нет.

Ответ №1:

Хорошо, это было действительно глупо.

Когда вы установите RedisOutputCacheProvider через Nuget, вы получите этот небольшой документ в вашем приложении / web.config:

 <!-- For more details check https://github.com/Azure/aspnet-redis-providers/wiki --><!-- Either use 'connectionString' OR 'settingsClassName' and 'settingsMethodName' OR use 'host','port','accessKey','ssl','connectionTimeoutInMilliseconds' and 'operationTimeoutInMilliseconds'. --><!-- 'databaseId' and 'applicationName' can be used with both options. --><!--
          <add name="MyRedisOutputCache" 
            host = "127.0.0.1" [String]
            port = "" [number]
            accessKey = "" [String]
            ssl = "false" [true|false]
            databaseId = "0" [number]
            applicationName = "" [String]
            connectionTimeoutInMilliseconds = "5000" [number]
            operationTimeoutInMilliseconds = "1000" [number]
            connectionString = "<Valid StackExchange.Redis connection string>" [String]
            settingsClassName = "<Assembly qualified class name that contains settings method specified below. Which basically return 'connectionString' value>" [String]
            settingsMethodName = "<Settings method should be defined in settingsClass. It should be public, static, does not take any parameters and should have a return type of 'String', which is basically 'connectionString' value.>" [String]
            loggingClassName = "<Assembly qualified class name that contains logging method specified below>" [String]
            loggingMethodName = "<Logging method should be defined in loggingClass. It should be public, static, does not take any parameters and should have a return type of System.IO.TextWriter.>" [String]
            redisSerializerType = "<Assembly qualified class name that implements Microsoft.Web.Redis.ISerializer>" [String]
          />
  

Это указывает на то, что значение по умолчанию для «ssl» будет равно false.
Однако при чтении самого кода фактически по умолчанию установлено значение true.

Таким образом, явная настройка ssl на false исправила это.

Редактировать

О, и мне пришлось понизить RedisOutputCacheProvider до версии 1.7.5.

3.0.1 у меня вообще не сработал.

Ответ №2:

Мой работает на локальном хосте без настройки SSL. В рабочей среде мне это требуется, но у меня это часть строки подключения (которую мне предоставила моя служба хостинга Redis).

Причина, по которой он не работал, и вам пришлось понизить RedisOutputCacheProvider до версии 1.7.5, заключается в том, что вы используете Exchange.Redis.Strongname.dll (версия 1.2.6)

Согласно этой проблеме, Redis больше не требует строгого имени, потому что базовая версия теперь имеет строгое имя. https://github.com/Azure/aspnet-redis-providers/issues/107

Поэтому, чтобы использовать RedisOutputCacheProvider версии v3.0.144, вам необходимо удалить Exchange.Redis.Strongname.dll (версия 1.2.6) и установите Exchange.Redis.dll (версия 2.0.601) через Nuget