2012-02-23 181 views
4

我已經成功地開始使用Azure AppFabric Caching Service,但我不確定創建DataCacheFactory對象的最佳實踐方式是什麼。現在我創建它,每進入一次緩存,但顯然這不是做這件事的理想方式...使用Azure AppFabric緩存服務的最佳實踐?

一些建議打電話給單身人士。但我不確定我是否理解這將如何實現(不是實際的Singleton類,而是如何將它們結合在一起)。

今天我有一個CacheProvider類,它是使用Ninject爲我創建的,我可以執行Get/Put/Remove操作。對於這些方法中的每一個,我創建DataCacheFactory對象,然後調用.GetDefaultCache()來獲取DataCache對象,我分別稱其爲Put/Get/Remove。我這樣做的,看起來像這樣一個方法:

private T Cache<T>(Func<DataCache, T> cacheAction) 
{ 
    using (DataCacheFactory dataCacheFactory = new DataCacheFactory()) 
    { 
     DataCache dataCache = dataCacheFactory.GetDefaultCache(); 
     return cacheAction(dataCache); 
    } 
} 

現在我敢肯定,這是不那麼聰明,想法,我應該不是通過一個Singleton來獲取數據高速緩存的對象,其中DataCacheFactory對象只創建一次。但是這個對象在請求之間如何生存呢?而且這對於Azure上的大於1個實例是如何工作的?

希望這一切都合情合理,而且有比我更多經驗的人(3小時)可以幫助我。

+0

從http://www.hanselman.com/blog/InstallingConfiguringAndUsingWindowsServerAppFabricAndTheVelocityMemoryCacheIn10Minutes.aspx參見方法CacheUtil.GetCache – 2012-10-01 13:24:37

回答

6

單身人士對象居住在應用程序範圍。只需在全局靜態級別聲明您的私有DataCache對象,提供一個屬性Get即可實例化該對象(如果該對象爲null)或返回該對象(如果該對象不爲null)。

這樣,每次應用程序回收時,您只需支付一次儀表配置和緩存連接的成本。

每個實例都會實例化自己的DataCache對象,並且沒問題。

存儲緩存的實際數據不存儲在本地計算機的內存中,而是存儲在Azure的分佈式和超快速的專用緩存服務器中。

+0

我想補充的是,DataCacheFactory的每個實例計算作爲緩存配額其中一個連接,因此使用單是一個非常好的主意。如果您啓用了本地緩存,那麼數據可能會駐留在內存中。 – knightpfhor 2012-02-24 01:41:16

+0

聽起來不錯。我已經改變了我的代碼到這種方法,它似乎按預期工作。太糟糕了微軟沒有在文檔中顯示這一點,本來會更容易實現它是正確的... ...感謝! – noocyte 2012-02-24 06:54:36

+0

在Azure MVC 3 webrole中,這是否意味着在Global.asax.cs文件中對其進行了標記? – NER1808 2012-04-16 15:32:47