如何在ASP.NET Core中使用EFCore进行缓存

时间:2017-04-17 17:08:04

标签: asp.net-core entity-framework-core

我在表格上有一个选择查询,它提供了网站上的最后一次搜索。

这是为了灵感,并不需要为每个页面调用更新,因此我想缓存这些搜索,因为它开始显示一些性能影响。

我的网站使用ASP.NET Core和EFCore。

我认为没有内置的方法可以在一条线上完成。 什么是最好的方法?

我正在考虑每隔10分钟更新一次内存中的300次搜索并随机选择其中一些。

到目前为止,我已经找到了可以使用的这两个选项:

  1. ASP.Net Core的原始缓存方法 How to cache resources in Asp.net core?

  2. EFCore开源扩展,其中不仅包含缓存 http://entityframework-plus.net/

  3. 我正在使用的解决方案:

    in startup.cs:
    services.AddMemoryCache();
    
    
    in view/controller:
    var LAST_SEARCHS_COUNT = 5;
    var lastSearchs = await Cache.GetOrCreateAsync<List<Search>>("LAST_SEARCHS"
        ,(k)=> {
            k.AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10);
            return (from s in DbContext.Searchs
                    orderby s.CreationTime descending
                    select s).Take(LAST_SEARCHS_COUNT * 40).ToListAsync();
        });
    

    影响非常显着,通话次数除以100以上:

    Impact of changes...

1 个答案:

答案 0 :(得分:2)

您可以使用Response Caching

scanf

另外Response Caching Middleware

您还可以保留DataContext的静态实例,并确保启用更改跟踪。这将使其保持在内存中以跟踪变化。它可能会变慢。