如何缓存服务器端变量并使它在MVC中过期

时间:2018-11-09 14:06:19

标签: asp.net-mvc asp.net-mvc-4

我在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 :(得分:2)

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属性来控制每个参数和/或某些参数多长时间以及是否要具有缓存的设置。

有关caching in .Net的更多阅读内容

答案 1 :(得分:0)

您可以简单地使用ASP.Net内置的OutputCache。

持续时间以秒为单位,您可以使用VaryByParam通过参数存储不同的缓存。

innerRef