簡體   English   中英

在ASP.NET MVC 3中緩存數據

[英]Caching Data in ASP.NET MVC 3

我有一個ASP.NET MVC 3應用程序,基本上只是一組Web服務。 這些Web服務由一組Controller操作公開。 每個控制器操作都會查詢我的數 因為我的數據很少變化,並且陳舊的數據不是一個問題,我想我會實現一些緩存來提高性能。 我的目標是:

  1. 永遠不要緩存對用戶的響應。
  2. 將數據庫記錄緩存最多24小時。 如果已經過了24小時,請再次點擊數據庫。

那有意義嗎? 我知道如何防止緩存響應。 我只使用以下內容:

HttpContext.Response.Cache.SetCacheability(cacheability)

但是,我不知道如何在內存中緩存我的數據庫記錄長達24小時。 有沒有人對如何做到這一點有任何建議? 我甚至不確定在哪里看。

謝謝

您可以使用System.Runtime.Caching命名空間(或ASP.NET緩存,但這是較舊的,只能在Web應用程序中使用)。

這是一個示例函數,您可以使用它來包裝當前的數據檢索機制。 您可以更改MemoryCache.Add中的參數來控制緩存的數量,但是您要求24h以上。

using System.Runtime.Caching;    // At top of file

public IEnumerable<MyDataObject> GetData() 
{
    IEnumerable<MyDataObject> data = MemoryCache.Default.Get(MYCACHEKEY) as IEnumerable<MyDataObject>;
    if (data == null)
    {
        data = // actually get your data from the database here
        MemoryCache.Default.Add(MYCACHEKEY, data, DateTimeOffset.Now.AddHours(24));
    }
    return data;
}

正如@Bond所提到的,如果您緩存的數據可能在24小時內發生變化,您可能還希望查看使用SQL緩存依賴關系。 如果它非常靜態,那么這將完成你的要求。

MVC框架是持久性不可知的。 沒有內置的方法來存儲數據,因此沒有內置的方法來緩存存儲的數據。

OutputCache屬性可用於緩存服務器響應。 但是你明確表示那不是你想要做的事情。

但是,如果要保留在MVC框架內,您仍可以使用內置的OutputCache 考慮將要緩存的數據公開為JSON結果

[OutputCache(Duration = 86400)]
public JsonResult GetMyData() {
    var results = QueryResults();
    return Json(results);
}

/ControllerName/GetMyData的JSON字符串將被緩存24小時,因此實際查詢每天只會運行一次。 這意味着您必須在最終頁面上實現AJAX調用,或者從服務器進行另一次HTTP調用。 這些都不是理想的。

我會在MVC框架之外尋找你的問題的另一個解決方案。 考慮一下memcached ,它就是為了這個目的而創建的。

你所談論的並不完全是MVC的責任。 ASP.Net只允許你生成它所產生的東西(而且這是他們的回應,顯而易見)。

如果你想緩存數據,最好將它與它生成的相同位置 - 在BL或數據層中的某個地方。

你可以這樣做:

public class DataCacher
{
    private static String data;
    private static DateTime updateTime;

    private DataCacher() { }

    public static String Data
    {
        get
        {
            if (data == null || updateTime > DateTime.Now)
            {
                data = "Insert method that requests your data form DB here: GetData()";
                updateTime = DateTime.Now.AddDays(1);
            }
            return data;
        }
    }
}

String data數據在此處顯示您的實際數據 添加此類后,用DataCacher.Data替換GetData()方法。

希望它有助於或至少引導您進一步思考。

如果您使用的是MSSQL,則可能需要查看SQL Cache Dependency

我不確定您是否可以將緩存過期配置為24小時,但是您可能不需要緩存依賴性 - 只要數據庫有更新,它就會使緩存失效(即應該比緩存時間更有效)戰略)。

是一篇很好的文章,討論了ASP.NET MVC 3的幾個與性能相關的實踐,並提到了緩存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM