mvc中的OutputCache


mvc4中有一個標記屬性OutputCache,用來對ActionResult結果進行緩存,如何理解呢?概括地說,就是當你的請求參數沒有發生變化時,直接從緩存中取結果,不會再走服務端的Action代碼了.

1.[OutputCache(Duration=300)]

//事例代碼: 
[OutputCache(Duration = 300)] public ActionResult Index(int? id,string name) { var person = new Person { ID = Convert.ToInt16(id), Name = name, City="Beijing"}; return View(person); }

請求此Action的url可以為:  person/Index?id=100&name="bird",

當第一次請求這個地址時,會執行Index方法,並把結果緩存起來,且過期時間為300秒

接下來,如果不改變id和name參數的前提下,在距離上次請求300秒  內,再來請求這個地址,不會執行Index方法,直接從緩存中拿結果.

當id或者name的參數值發生變化時,發送請求時,會執行index方法,然后再緩存此結果.

[Output(Duration=300)],這種方法沒有指明具體針對哪個參數來緩存,所以默認是針對所有參數,即任何一個參數值發生變化,都會緩存一份.

那么,如果,我想指定具體的參數,進行緩存該如何做呢?請看下一個方案

2.[OutputCache(Duration = 300,VaryByParam="id")]

此種方式,指明了緩存是針對哪個參數來做的,即只有當id參數值發生變化的時候,才做緩存,其他機制同第一種.

 

3.對於參數中的緩存時間設置,可以在配置文件中進行配置.

 <caching>
      <outputCacheSettings>
        <outputCacheProfiles>
          <add name="long" duration="50"/>
          <add name="Short" duration="10"/>
        </outputCacheProfiles>
      </outputCacheSettings>
    </caching>

使用:

  [OutputCache(CacheProfile="Short", VaryByParam = "id")]
        public ActionResult Index(int? id, string name)
        {
            var person = new Person { ID = Convert.ToInt16(id), Name = name, City = "Beijing" };
            return View(person);
        }

如此,便於維護和更改.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM