CacheManager обрабатывает inproc и Redis, поскольку объединительная плата не синхронизируется - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть этот сценарий, использующий CacheManager (https://github.com/MichaCo/CacheManager):

  • 1 консольное приложение (с дескриптором кэша inproc + дескриптором кэша Redis в качестве объединительной платы)
  • 1 ASP.Веб-приложение NET MVC (с дескриптором кэша inproc + дескриптором кэша Redis в качестве объединительной платы)

Конфигурация кэша для консольного приложения и приложения ASP.NET MVC одинакова:

var configuration = ConfigurationBuilder.BuildConfiguration(settings =>
        {
            settings                    
                .WithSystemRuntimeCacheHandle("InProc")
                .And
                .WithRedisConfiguration("redis", config =>
                {
                    config.WithAllowAdmin()
                        .WithDatabase(0)
                        .WithEndpoint("localhost", 6379);
                })
                .WithMaxRetries(1000)
                .WithRetryTimeout(100)
                .WithRedisBackplane("redis")
                .WithRedisCacheHandle("redis", true);
        });

        ICacheManager<string> cache = (ICacheManager<string>)CacheFactory.FromConfiguration(typeof(string), configuration);

Однако, когда я делаю простую аннулирование кэша из консольного приложения, например:

cache.Remove("Key")

Он не удаляется из дескриптора кэша inproc в веб-приложении. Я экспериментировал и создал 2 различных консольных приложения.с той же конфигурацией, что и выше, и это работает так же, как ожидалось (когда одно из консольных приложений делает недействительным ключ из кэша, он также удаляется из всех дескрипторов кэша в другом консольном приложении).

Это что-то особенное происходитпри использовании CacheManager при использовании с веб-приложением и консольным приложением, что означает, чтоСинхронизация кеша не работает?

1 Ответ

0 голосов
/ 20 сентября 2018

Хорошо, после некоторого исследования я понял, что консольное приложение использует версию 1.1.2 CacheManager, а веб-приложение использует версию 1.1.1.После обновления это внезапно начало работать.

Таким образом, ответ любому, кто столкнулся с этой проблемой, должен убедиться, что вы используете одну и ту же версию этой библиотеки на всех процессах, обращающихся к кешу.Однако, если только это не ошибка, исправленная в 1.1.2, я чувствую, что это должно работать даже с разными версиями.В конце концов, это pubsub с объединительной платы redis, которая поддерживает синхронизацию ...

...