Как кэшировать переменную на стороне сервера и иметь срок ее действия в MVC - PullRequest
0 голосов
/ 09 ноября 2018

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

Большое спасибо.

ОБНОВЛЕНИЕ: я пробовал MemoryCache, но он обновляется каждый раз, когда я обновляю браузер, а не каждые 5 минут. Я отображаю ViewBag.IsTime в браузере.

private bool IsTimeForCountUpdate()
    {


        var cacheKey = $"MyCacheKeyName";

        MemoryCache cache = MemoryCache.Default;
        int myCache = 0;

        if (cache.Contains(cacheKey))
        {
            //myCache = (int)cache[cacheKey];
            return true;
        }
        else
        {

            myCache = 1;

            CacheItem cacheItem = new CacheItem(cacheKey, myCache);
            cache.Add(cacheItem, new CacheItemPolicy() { AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(5) });

            return false;
        }

    }

public async Task<ActionResult> Dashboard(int t = 1)
    {
        ViewBag.IsTime = IsTimeForCountUpdate() ? "YES" : "NO";

...

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

MemoryCache

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

Пример:

Допустим, вы хотите кэшировать некоторые данные, которые вы часто получаете из базы данных:

    var cacheKey = "MyCacheKeyName";

    MemoryCache cache = MemoryCache.Default;
    XYZType myCache = null;

    if (cache.Contains(cacheKey))
    {
        myCache = (XYZType)cache[cacheKey];
    }
    else
    {

        myCache = GetDataIWantToCache();

        CacheItem cacheItem = new CacheItem(cacheKey, myCache);
        cache.Add(cacheItem, new CacheItemPolicy() { AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(5) });
    }

Объяснение

Блок if проверяет наличие вашего элемента и возвращает его, если это так.

else создаст ваш элемент (замените GetDataIWantToCache чем угодно), так как он не был найден, и вставьте его в кеш на пять минут.

OutputCache

Используйте атрибут OutputCache , если вы хотите кэшировать результаты содержимого для всего контроллера или отдельных действий. Он имеет настройки для контроля, как долго и если вы хотите иметь кэш для каждого параметра и / или некоторые параметры, используя свойство VaryByParam.

Еще немного чтения для вас по кешированию в .Net

0 голосов
/ 09 ноября 2018

Вы можете просто использовать встроенную в ASP.Net OutputCache.

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

    [OutputCache(Duration = 300, VaryByParam = "id")]
    public ActionResult Index(int? id)
    {
        return Content(DateTime.Now.ToString());
    }
...