Как использовать IMemoryCache в приложении с несколькими экземплярами - PullRequest
0 голосов
/ 20 января 2020

Я использую IMemoryCache в своем базовом веб-приложении ASP. Net, размещенном на базе облака dry.

Приложение имеет 3 экземпляра.

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

Мой код выглядит следующим образом:

Startup.cs

    public void ConfigureServices(IServiceCollection services)
    {
       // other code...
       services.AddMemoryCache();
       // other code...
    }

ExampleController.cs

    private IMemoryCache cache;

    public ExampleController(IMemoryCache cache)
    {
        this.cache = cache;
    }

    private void ClearCacheByKey(string key)
    {
        this.cache.Remove(key);
    }

Как решить проблему с кешем и несколькими экземплярами моего приложения?

1 Ответ

0 голосов
/ 20 января 2020

Кэш-память использует память вашего приложения для кеширования вещей. Таким образом, у вас есть три экземпляра кеш-памяти, по одному на каждый экземпляр вашего приложения. Каждый из них не зависит от других. Если вы пишете в один, он не записывает в другие экземпляры, и то же самое действительно для удаления.

При этом было бы лучше, если бы вы использовали механизм централизованного кэширования. Чтобы все экземпляры вашего приложения вызывали один и тот же экземпляр кэша.

В качестве альтернативы, но Я бы не рекомендовал делать это , вы можете создать конечную точку для очистки кэша, который вам нужен вызывать при аннулировании кэша на машине, чтобы сделать его недействительным во всех других экземплярах приложения.

...