我正在开发一个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。那么请问我的代码有什么问题?为什么我不能缓存?我在内存缓存方面的做法是否正确?
答案 0 :(得分:0)
你得到的代码应该有用,虽然它不完全正确(它留下了在检查和使用之间缓存过期的非常小的可能性),但是当你的到期很长时我怀疑这不是正在发生的事情这里。要更正您的代码:
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;
}
我不确定这会解决你的问题!