我在表格上有一个选择查询,它提供了网站上的最后一次搜索。
这是为了灵感,并不需要为每个页面调用更新,因此我想缓存这些搜索,因为它开始显示一些性能影响。
我的网站使用ASP.NET Core和EFCore。
我认为没有内置的方法可以在一条线上完成。 什么是最好的方法?
我正在考虑每隔10分钟更新一次内存中的300次搜索并随机选择其中一些。
到目前为止,我已经找到了可以使用的这两个选项:
ASP.Net Core的原始缓存方法 How to cache resources in Asp.net core?
EFCore开源扩展,其中不仅包含缓存 http://entityframework-plus.net/
我正在使用的解决方案:
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以上:
答案 0 :(得分:2)