如何在ASP.NET Core中使用EFCore進行緩存

asp.net-core entity-framework-core

我在一個表上有一個選擇查詢,它給出了網站上的最後一次搜索。

這是為了靈感,並不需要為每個頁面調用更新,因此我想緩存這些搜索,因為它開始顯示一些性能影響。

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

我相信沒有內置的方法可以在一條線上完成。 什麼是最好的方法?

我正在考慮每隔10分鐘更新一次內存中的300次搜索並隨機選擇其中一些。

到目前為止,我已經找到了這兩個我可以使用的選項:

  1. ASP.Net Core的原始緩存方法如何緩存Asp.net核心中的資源?

  2. 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以上:

變化的影響......

熱門答案

您可以使用響應緩存

[ResponseCache(VaryByHeader = "User-Agent", Duration = 30)]
public IActionResult About2()
{

響應緩存中間件

您還可以保留DataContext的靜態實例,並確保啟用更改跟踪。這將使其保持在內存中以跟踪變化。它可能會變慢。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow