天天看點

緩存篇~第六回 Microsoft.Practices.EnterpriseLibrary.Caching實作基于方法簽名的資料集緩存

這一講中主要是說EnterpriseLibrary企業級架構裡的caching元件,它主要實作了項目緩存功能,它支援四種持久化方式,記憶體,檔案,資料庫和自定義,對于持久化不是今天讨論的重要,今天主要說,如何使用AOP的思想再配合Caching元件來實作可更新的,可插拔的,松耦合的,基于資料集(結果集)的緩存方案,之是以叫它方案,确實,在實作上有一定難度,我自己對于微軟的NLayerApp架構裡用到的Attribute注入方式也對一定修改,因為NLayerApp裡的緩存資料集并不支援方法參數為對象和lambda表達式的情況,而我的這個方案已經解決了上面兩種情況,可以說,完全支援!

我們來看一下Web.config對Caching的配置

 注冊sections塊

配置caching塊

為unity塊添加要進行緩存的方法

1 通過CachingAttribute特性對方法進行辨別,并配置緩存方式,get,put,remove,一般在添加,修改操作之後,會對緩存進行remove操作

2 CachingMethod辨別了緩存的方式

3 一個标準的緩存CRUD接口,它預設使用Microsoft.Practices.EnterpriseLibrary.Caching來實作,目前你可以進行利用這個接口來實作多态

4 使用Microsoft.Practices.EnterpriseLibrary.Caching來實作緩存的持久化功能

5 一個工廠子產品,來對緩存的持久化方式進行建立,這個一般可以在配置檔案中動态去配置的,本類使用簡單的單例模式來進行建立,不考慮多線程情況

7 最後貢獻緩存攔截類,這是核心,是提供AOP功能的核心,其中自己添加了對結構體和lambda表達式和類的方法參數的支援,原版應該是陳晴陽寫的,但它不支援結構體和lambda和類,是以,我的版本把它完善了。

我們的緩存隻能配置在接口的方法中,這主要考慮到unity的注入環節和面向對象的多态特性,本例中,緩存這塊配置在了BLL層中,當然,如果你的架構允許,也可以做在DATA層中,當然DATA層的緩存力度可能太大,我覺得并不太合适,但代碼可能更精簡,所

以,大家要因情況而議,到在哪層都沒問題。

緩存配置好後,可以使用sql profiler等監控工具去檢視資料庫的通路情況!