天天看點

緩存使用的思考1

常見緩存産品

<a href="http://www.couchbase.com/memcached" target="_blank">Replace your Memcached Tier with a Couchbase Cluster</a>

     有windows版本,也有linux版本。

     安裝couchbase cluster對CPU有要求,因為有幾次安裝提示我CPU不支援之類的資訊。

     AppFabric是微軟為windows server提供的一系列內建技術,友善建構、擴充和管理運作在IIS      上的應用。緩存是AppFabric提供的功能之一,而且支援分布式緩存。

memcached

     老牌的分布式緩存。

redis

     流行的鍵值型NoSQL資料庫,可以當做緩存來使用。可以存儲string,hash,list,set,

     sorted set等多種類型的值。

mongodb

     流行的文檔型NoSQL資料庫,易擴充,結構自由,也可以當做緩存來使用。

memcached、redis、mongodb由于一些原因,在windows上運作不是太好,可能出現一些奇怪的問題。這一方面源于它們本身對windows支援不夠,或者本來就不推薦在windows上使用。

經常會被緩存的内容:

分類資訊

不常改變的資訊

其實産品資訊,甚至使用者資訊,比如說username對應的userid,userid對應的username,其實緩存的意

義還是蠻大的。試想一下,如果隻是想要username對應的userid,這一點資訊是不是就不要查詢資料庫了,好像有點浪費。引申開來,很多根據主鍵查詢少量常用資訊的需求都可以用緩存來實作,替換掉查詢資料庫。

說到這裡,肯定有人會說:“資訊過期了怎麼辦,使用者修改了資訊怎麼辦。”。一般的緩存都提供過期機制,相對時間過期,絕對時間過期,修改資訊之後可以設定絕對過期時間為過去的一個時間,下次通路緩存的資訊的時候,就會因為緩存失效而從資料源擷取了。還可以在修改資訊之後,更新一下緩存,保持緩存總是最新資訊。

首先緩存應該是一個元件,一個不依賴于其他元件的基礎元件。提供鍵值方式的存取,鍵位字元串類型,值為對象類型。當然,如果值能提供多種資料類型,那就更好了。比如說redis就提供string,hash,list,set,sorted set。

提供緩存過期功能,絕對時間過期,相對時間過期。

提供緩存依賴功能,依賴檔案,依賴資料庫。甚至提供依賴接口,使用者可以實作自己需要的依賴。

更好一點的,還支援分布式緩存。

既然是一個基礎元件,肯定會被其他的元件調用,為其他元件來緩存資料。

我們的應用經常會分層,比如說業務層,持久層。

假設我們現在需要業務層提供業務對象的緩存功能。

業務層需要引入緩存元件,調用緩存元件的接口實作業務對象的緩存,擷取,過期。

業務層引入緩存元件實作業務對象的緩存,對外部應該是個黑盒,不需要外部關心使用那種緩存元件,使用的具體細節,哪些場景使用,外部存取業務對象的接口也不應該發生變化,不需要任何緩存相關參數。但是應該允許外部調用者關閉緩存,就是說外部調用者應該可以在初始化業務對象的時候聲明不使用業務對象的緩存機制,或者在使用的過程中設定關閉和開啟業務對象的緩存機制。

假設我是業務層的調用者,我希望在初始化業務層對象的時候,可以設定是否啟用業務對象的緩存機制。同時在使用已經初始化的業務層對象的時候,也可以在需要的時候進行緩存機制的開啟和關閉。

未完,待續。。。

本文轉自 virusswb 51CTO部落格,原文連結:http://blog.51cto.com/virusswb/1096939,如需轉載請自行聯系原作者