繁体   English   中英

ASP.NET MVC 5 中的内存缓存不起作用

[英]In memory caching in ASP.NET MVC 5 is not working

我正在开发一个 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。 但是在第二个请求中,它不应该为空。 但是每当我访问该方法时, cache.Get("regions")始终为 null。 我在内存缓存中的做法是否正确?

您拥有的代码应该可以工作,尽管它并不完全正确(它在检查和使用之间留下了缓存过期的非常小的可能性),但由于您的过期时间很长,我怀疑这不是这里发生的事情。 要更正您的代码:

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

我不确定这是否会解决您的问题!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM