2013-03-18 64 views
1

在MVC 4/SQL 2012/Entity Framework 5應用程序中,我將所有文件上載到數據庫中的單個表中。ASP.NET MVC中的緩存文件4

然後我有一個FileController動作獲取如下:

public partial class FileController : Controller { 
    public virtual ActionResult Get(Guid key) { 
    // Get file from database and return File 
    } 
} 

什麼緩存策略做我有可用的,在MVC中,爲這些文件?

我應該使用ETags嗎?怎麼樣?

請問有人能幫我解決這個問題嗎?

謝謝你,

米格爾

+0

「這些文件」?你可以更具體一些,更好地理解解釋。 – faizanjehangir 2013-03-18 11:39:17

+0

基本上,當我訪問File/Get/c7eb1f1c-7cbe-46ed-8ace-05cdaa1bc46c時,我將從數據庫中加載ID = c7eb1f1c-7cbe-46ed-8ace-05cdaa1bc46c的文件並返回它。所以當我說「這些文件」時,我的意思是這個操作返回的所有文件。這是你問的嗎? – 2013-03-18 14:47:31

回答

2

我不認爲使用的ETag是用於確定您的文件名一個明智的選擇。由於使用它們有其自己的優點和缺點,請閱讀this article瞭解更多關於etags的信息。

有幾種方法來緩存結果集,文件在你的情況。但是,在處理緩存ORM對象時,需要注意這一點,因爲通常緩存的項目會在文件發生更改時被刪除或不更新,您需要自己處理這部分。無論哪種方式,您都可以設置需要刷新的緩存數據的持續時間。

我還沒有遇到一個內置的.NET MVC4支持緩存數據,總之,你總是可以寫你自己定製的API或使用/修改現有的完成所需的任務。在這種情況下,您可能會發現this post有幫助。至於你使用GUID鍵作爲文件名的情況,沒有規定etags和uid並行的規則。您可以隨時以您想要的方式緩存數據。看看Steve's blog以及他正在使用實體框架與MVC。

編輯:

緩存在客戶端瀏覽器也有薄冰上行走。這一切都取決於類型,持續時間,敏感度以及最重要的用戶,更不用說應用程序的性能了。由於我很要好的朋友曾經說過:「不要吃,直到你餓了」 ......

對於客戶端的瀏覽器設置緩存,你可以做這樣的事情在ASP:

從的例子文章提到如下:

<%@ OutputCache Duration='120' Location='Client' VaryByParam='none' %> 

「這將節省120秒高速緩存和緩存的數據不應該被保存在服務器上,它應該只在客戶端瀏覽器存儲。」

更多關於探索緩存in this articlethis one

+0

當然,當使用數據庫中的文件時,我需要小心地緩存。我的想法是有一個簡短的緩存時間... 20分鐘左右。這將因項目而異。關於緩存我不能使用:[OutputCache(Duration = 600,Location = OutputCacheLocation.Client,VaryByParam =「key」]?是不是OutputCacheLocation.Client將緩存的文件保存在用戶的瀏覽器緩存中?另一個選項是將緩存的文件保存在服務器文件夾中。不是? – 2013-03-19 18:12:11

+0

@Shapper參考答案中的編輯。 – faizanjehangir 2013-03-20 10:55:45