Enterprise Library 2.0 -- Caching Application Block
?????? 開始寫Enterprise Library 2.0的學習體會,準備先把每個部分的入門部分寫好,然后再繼續深入的研究每一部分,希望能得到高手的指點和建議。今天寫的是Enterprise Library 2.0 中的 Caching Application Block,前面的介紹部分參考了Enterprise Library 2.0 自帶的幫助。
一、為什么要使用緩存技術?
當我們構建企業級分布式應用時,設計師和開發者都會面對很多挑戰。Caching能夠幫助他們克服這其中
的一些困難,包括:
1、性能(Performance):Caching主要是通過盡可能的保存一些有關的數據來提高應用程序的性能,避免了重復的從數據庫中存取數據。
2、可變性(Scalability): 利用緩存來存儲數據可以有效的節省系統資源,并且能夠隨著應用程序需求的增加來增加可變性。
3、有效性(Availability):通過將數據存放到本地緩存中,還可以使應用程序在系統發生故障時工作,包括硬件,網絡的故障等。
二、在什么情況下使用?
1、當你需要頻繁訪問靜態數據或訪問的數據很少發生變化時;
2、對數據的訪問,創建或傳遞需要花費大量時間時;
3、會被經常使用的數據需要進入緩存。
三、緩存可以用在哪些項目中?
1、WinForm
2、Console Application
3、Windows service
4、Com+ Server
5、Web Service
6、ASP.NET Web Applicatio
等等...
?????? 當然,我們還應該了解的是每個應用程序都可以使用多個Cache,但不能在不同的應用程序中共享一個Cache。Enterprise Library中的Caching Application Block 的性能已經被高度優化了,并且是線程安全和異常安全的,我們還可以根據自己的需要對它進行擴展。
四、對系統的要求
1.Microsoft Windows 2000, Windows XP Professional, or Windows Server 2003 operating system
2.Microsoft .NET Framework 2.0
3.VS2005
五、初步體驗Caching Application Block
下面我們來看一下如何使用Caching Application Block:
首先要添加對Microsoft.Practices.EnterpriseLibrary.Caching的引用。
????????public?void?UseCaching()
????????{
????????????int?id?=?0;
????????????string?name?=?"SHY520";
????
????????//創建一個緩存管理器
????????????CacheManager?testcaching?=?CacheFactory.GetCacheManager();
????????????//添加要進行緩存的數據
????????????testcaching.Add(id.ToString(),?name);
????????//取出緩存中的數據
????????????string?rname?=?(string)testcaching.GetData(id.ToString());
????????????Assert.AreEqual(name,?rname);
????????}
????? 相信通過上面的例子,你對Enterprise Library2.0中的Caching Application Block 已經有了一個初步的了解,下面我們來談談如何配置Caching Application Block。
六、配置Caching Application Block
?????? 首先打開我們建好的項目,我調試時候用的是一個Test Project,新建一個配置文件App.Config。這個時候我們在項目中選中App.Config右鍵點擊,選擇Open With...,如下圖:
????? 然后在彈出的Choose Program 對話框中點 add ,并選擇我們Enterprise Library2.0安裝目錄下的Bin目錄里的EntLibConfig.exe文件,如下圖:
???? 此時打開App.Config文件后出現下圖:
??? 然后點擊 File --> Save All,這樣我們就完成了對Caching Application Block的配置,此時我們發現我們的App.Config文件里多了如下內容:
<configuration>
??<configSections>
????<section?name="cachingConfiguration"?
type="Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheManagerSettings,?
Microsoft.Practices.EnterpriseLibrary.Caching,?Version=2.0.0.0,?Culture=neutral,?
PublicKeyToken=null"?/>
??</configSections>
??<cachingConfiguration?defaultCacheManager="Cache?Manager">
????<cacheManagers>
??????<add?expirationPollFrequencyInSeconds="60"?
maximumElementsInCacheBeforeScavenging="1000"
????????numberToRemoveWhenScavenging="10"?backingStoreName="Null?Storage"
????????name="Cache?Manager"?/>
????</cacheManagers>
????<backingStores>
??????<add?encryptionProviderName=""?
type="Microsoft.Practices.EnterpriseLibrary.Caching.BackingStoreImplementations.NullBackingS
tore,?Microsoft.Practices.EnterpriseLibrary.Caching,?Version=2.0.0.0,?Culture=neutral,?
PublicKeyToken=null"
????????name="Null?Storage"?/>
????</backingStores>
??</cachingConfiguration>
</configuration>
七、Caching Application Block 的簡單操作
1.Adding Items to the Cache
?????? 下面的代碼中使用了CacheManager的Add方法,它創建了一個String類型的對象并將它存到緩存,緩存時間為10分鐘,在這10分鐘之類我們可以通過GetData()的方法來取得緩存里所存儲的值。
????????public?void?UseCaching()
????????{
????????????int?id?=?0;
????????????string?name?=?"SHY520";
????????????
????????????//創建一個緩存管理器
????????????CacheManager?testcaching?=?CacheFactory.GetCacheManager();
????????????//添加要進行緩存的數據,緩存時間為10分鐘
????????????testcaching.Add(id.ToString(),?name,?CacheItemPriority.Normal,?null,?new?
SlidingTime(TimeSpan.FromMinutes(10)));
????????????//取出緩存的數據
????????????string?rname?=?(string)testcaching.GetData(id.ToString());
????????????Assert.AreEqual(name,?rname);
????????}
2.Loading the Cache
???????? Loading Cache 有兩種情況:Proactive loading 和 Reactive loading。
??????? 我理解為是主動緩存和被動緩存,主動緩存是將我們建設的項目中的一些貫穿整個系統都會用到的或是經常用到的數據而有很少改變的數據在程序初始化的時候就從數據庫中取出,裝入到緩存中,而被動緩存是因為需要響應某個頁面或是某一段程序的請求時而將一些必須的數據臨時裝入緩存。二者各自有著自己的優點和缺點。主動緩存的優點有:1.因為這一類的緩存在應用程序的初始化的時候已經被裝入Cache,所以我們在以后的使用中不需要判斷它是否存在(當然為保險起見,我還是建議使用緩存前都應該判斷一下是否為null);2、由于主動緩存中存放了我們經常需要用到的數據,所以它會使我們的程序的響應速度大大提高。但過多的使用這一類緩存會占用我們系統大量的資源,又會影響系統的運行速度,所以合理使用主動緩存非常重要。被動緩存的優點就是需要的時候才將數據裝入緩存,很靈活,也不會占用系統太多資源,缺點正是因為它的靈活讓我們搞不清楚它什么時候存在,使用的時候務必先檢查它是否存在。
?????? 舉個例子說吧(也許不是很恰當),我們做MIS系統時,登陸是必不可少的,而且我們一般都是在用戶登陸的時候將該用戶的一些必要的信息存放到一定的地方,以便后面操作時調用,這個時候我們就可以使用主動緩存。
????????public?void?LoadingCache()
????????{?
????????????//假設前面已經登陸成功,然后我們獲取登陸用戶的一些信息
????????????int?id?=?100;
????????????string?name?=?"SHY520";
????????????string?sex?=?"女";
????????????Person?person?=?new?Person(name,?id,?sex);
????????????//將登陸用戶信息裝入緩存
????????????CacheManager?loginCache?=?CacheFactory.GetCacheManager();
????????????loginCache.Add(id.ToString(),?person);
????????????//從緩存中取出登陸用戶信息
????????????//注意強制轉換類型
????????????Person?outperson?=?(Person)loginCache.GetData(id.ToString());
????????????Assert.AreEqual(outperson.Sex,sex);
????????????Assert.AreEqual(outperson.Name,name);
????????????Assert.AreEqual(outperson.Id,id);
????????}
3.Flushing the Cache(清空緩存)
將數據裝入緩存就必然需要清空緩存,下面將介紹如何清空緩存:
????????public?void?FlushCache()
????????{
????????????string?name?=?"SHY520";
????????????CacheManager?TestFlushCache?=?CacheFactory.GetCacheManager();
????????????TestFlushCache.Add("1",name);
????????????//清空緩存
????????????TestFlushCache.Flush();
????????????int?i?=?TestFlushCache.Count;
????????????Assert.AreEqual(0,i);
????????}
4.Removing Items from the Cache
本節中介紹如何移出緩存中的某一項,如下:
????????public?void?RemoveItemOfCache()
????????{
????????????string?name?=?"SHY520";
????????????CacheManager?TestFlushCache?=?CacheFactory.GetCacheManager();
????????????TestFlushCache.Add("1",?name);
????????????//從緩存中移出key=1的項
????????????TestFlushCache.Remove("1");
????????????int?i?=?TestFlushCache.Count;
????????????Assert.AreEqual(0,i);
????????}
5.Retrieving Items from the Cache
此節介紹如何取的緩存中的某一項的值,需要注意返回值類型的強制轉換。
????????public?void?GetDataFromCache()
????????{
????????????string?name?=?"SHY520";
????????????CacheManager?TestFlushCache?=?CacheFactory.GetCacheManager();
????????????TestFlushCache.Add("1",?name);
????????????//根據key值得到緩存中的某一項,但取值的時候注意類型的強制轉換
????????????string?rname?=?(string)?TestFlushCache.GetData("1");
????????????Assert.AreEqual(name,rname);
????????}
?????? 關于Caching Application Block的入門部分就說這么多,希望和正在學習Enterprise Library 2.0 的朋友們多交流,并希望過來人不吝提出建議。
Email:pwei013@163.com
總結
以上是生活随笔為你收集整理的Enterprise Library 2.0 -- Caching Application Block的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux 常见的六大 IPC 通信方式
- 下一篇: 给变量起名字