在ASP.NET中,内存缓存MVC 5无法正常工作

时间:2016-05-28 05:46:58

标签: asp.net-mvc caching memorycache

我正在开发一个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 个答案:

答案 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;
}

我不确定这会解决你的问题!