2010-06-12 73 views
0

喜讀書,我想,它下面的一個例子: 數據庫< - >數據訪問+緩存< - >業務邏輯< - > UI.NET Artchitecture的作品一樣 - 緩存的一切,從緩存中

所以基本上一切你從數據庫想應該是從緩存中訪問,如果它不在緩存中,基礎數據訪問層將填充如果並將其返回,否則從緩存中

回來有什麼缺點?在什麼scenerios這可能是一個很好的解決方案

回答

0

我喜歡爲System.Web.Caching.Cache類創建我自己的靜態包裝類。

本質上,您在您的Web應用程序模塊中創建一個類,並創建所有標準緩存函數(獲取,添加,刪除等)。這些方法需要用泛型來實現,以確保類型安全。

Here就是一個很好的例子

然後再創建一個靜態類,它通過對數據層作爲像從您的網絡層中的服務模式。

您的web層將調用靜態類上的方法,該靜態類將首先根據提供的方法參數生成CacheKey,檢查緩存,如果找到則返回,否則調用數據層,添加到緩存並返回。

根據您的業務對象是如何設置的,您可能需要提供深層副本(即實施IClonable和ovveride Clone方法)對你的對象。

此外,您的緩存解決方案取決於您的網絡農場架構。如果你有很多Web服務器,你的數據可能會變得陳舊,所以你需要決定那裏的最佳選擇(SQLCacheDependecy,Distributed Caching等)。

0

最明顯的缺點是高速緩存的有效性(你怎麼知道的數據沒有被更改/因爲你緩存它添加)和存儲/磁盤使用情況。

這是一個很好的解決方案時,您的數據是靜態的(沒有必要考慮何時更新緩存)。

我們對動態數據和緩存採用了類似的方法,引入了很多問題。有時緩存更新過於昂貴(服務器不得不通知所有客戶端他們緩存和更改的數據),有時客戶端上的內存使用率過高。