В памяти кэширование в ASP.NET MVC 5 не работает

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

Это метод GetRegions, который я кэширую:

public IEnumerable<Region> GetRegions(){
    ObjectCache cache = MemoryCache.Default;
    if(cache.Get("regions")==null)
    {
        IEnumerable<Region> regions = db.Regions;
        cache.Add("regions", regions, DateTime.Now.AddDays(1));
        return regions;
    }
    else
    {
        IEnumerable<Region> regions = (IEnumerable<Region>)cache.Get("regions");
        return regions;
    }
}

Согласно приведенному выше коду, в первом запросе cache.Get("regions")будет значение null. Но во втором запросе не должно быть null. Но всякий раз, когда я обращаюсь к этому методу, cache.Get("regions")всегда имеет значение null. Итак, пожалуйста, что не так с моим кодом? Почему я не могу кэшировать? Правильно ли кэширование памяти?

1 ответ

  1. Код, который у вас есть, должен работать, хотя он не совсем корректен (он оставляет открытой очень маленькую возможность истечения кэша между проверкой и использованием), хотя, поскольку ваш срок действия длинный, я подозреваю, что это не то, что происходит здесь. Чтобы исправить код:

    public IEnumerable<Region> GetRegions()
    {
        ObjectCache cache = MemoryCache.Default;
        const string key = "regions";
    
        IEnumerable<Region> regions = cache.Get(key) as IEnumerable<Region>;
        if (regions == null)
        {
            regions = db.Regions;
            cache.Add(key, regions, DateTime.Now.AddDays(1));
        }
        return regions;
    }
    

    Я не уверен, что это собирается исправить вашу проблему, хотя!