Enterprise Library 4.1學習---快取應用程式塊

liuxuhui發表於2021-09-09

快取是個啥?以及為啥要用快取就不廢話了,主要是從實用角度講下怎麼用

1.先新增對Microsoft.Practices.EnterpriseLibrary.Caching.dll的引用

2.修改web.config檔案,注意高度部分


    ...
   


 ...


 
   
              numberToRemoveWhenScavenging="10" backingStoreName="Null Storage"
        type="Microsoft.Practices.EnterpriseLibrary.Caching.CacheManager, Microsoft.Practices.EnterpriseLibrary.Caching, Version=4.1.0.0, Culture=neutral"
        name="Cache Manager" />
   

   
              name="Null Storage" />
   

 

...

3.使用快取,見下面的程式碼,關鍵地方都加了註釋

圖片描述using System;
using System.Collections.Generic;
using Microsoft.Practices.EnterpriseLibrary.Caching;
using Microsoft.Practices.EnterpriseLibrary.Caching.Expirations;

namespace CacheTest
{
    /// 


    /// 定義要快取的實體類
    /// 

    public class MyData
    {
        public string Name { set; get; }
        public int Age { set; get; }
        public string Color { set; get; }
    }

    public partial class _Default : System.Web.UI.Page
    {
        const string KEYNAME = "myDate";//快取的鍵值

        ICacheManager cacheManager;

        protected void Page_Load(object sender, EventArgs e)
        {
            cacheManager = CacheFactory.GetCacheManager();//例項化ICachemanager
        }

        protected void btnWrite_Click(object sender, EventArgs e)
        {
            //生成要快取的資料(實際開發中可以是從資料庫查詢出來的資料)
            List _list = new List
                new MyData(){ Age=1, Color="Yellow", Name="China"},
                new MyData{ Age=2,Color="Black",Name="USA"}
            };

            AbsoluteTime _ExpireTime = new AbsoluteTime(DateTime.Now.AddSeconds(30));//指定30秒後過期

            cacheManager.Add(KEYNAME, _list, CacheItemPriority.Normal, null, _ExpireTime);//加入快取


            Response.Write("Cache寫入完成," + DateTime.Now.ToString());
        }

        protected void btnRead_Click(object sender, EventArgs e)
        {

            this.R1.DataSource = GetCacheData();
            this.R1.DataBind();
            Response.Write("Cache載入完成," + DateTime.Now.ToString());

        }

        /// 
        /// 獲取快取資料
        /// 

        /// 
        public List GetCacheData()
        {
            List _cacheData = cacheManager.GetData(KEYNAME) as List;

            if (null == _cacheData)//記得一定要加此判斷(因為快取可能過期)
            {
                //如果快取資料為空,則重新生成資料,並加入快取(為檢測效果,特地把Color與Name前加了一個"New")
                _cacheData = new List
                new MyData(){ Age=1, Color="New Yellow", Name="New China"},
                new MyData{ Age=2,Color="New Black",Name="New USA"}
                };

                AbsoluteTime _ExpireTime = new AbsoluteTime(DateTime.Now.AddSeconds(30));//指定30秒後過期

                cacheManager.Add(KEYNAME, _cacheData, CacheItemPriority.Normal, null, _ExpireTime);
            }

            return _cacheData;
        }



    }
}
圖片描述前端頁面很簡單
圖片描述

html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">


    


    

    
            onclick="btnRead_Click" />
    
        
            

            

        
            
  • Age:,Name:,Color:

  •         

            
                
            

        

        


    圖片描述
    值得一提的是,快取是"全域性"性質的,也就是說在一個頁面寫入了快取,另一個頁面也可以讀取(當然:前提是快取未過期的情況下),我們可以利用這個特性把網站中經常使用的資料(比如一些基礎資料)快取起來,其它要用的地方直接從快取讀取,能有效減少對資料庫的訪問。

    來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/756/viewspace-2801271/,如需轉載,請註明出處,否則將追究法律責任。

    相關文章