我在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";
...
答案 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