1. 程式人生 > >分散式快取的學習(memcached,JBoss Cache)

分散式快取的學習(memcached,JBoss Cache)

一、分散式快取
memcached,JBoss Cache,SwarmCache,OSCache,JCS,EHCache等開源專案的關注率比較高。
memcached和其他幾個不同,JBoss Cache的特點是,功能大而全,可算是Cache集大成者,幾乎什麼都支援。
其餘的幾個都很輕量。SwarmCache,OSCache,JCS支援Cluster。EHCache不支援Cluste

Cache的基本特性。
1. 時間記錄
資料進入Cache的時間。
2. timeout過期時間
Cache裡面的資料多久過期
3. Eviction Policy 清除策略
Cache滿了之後,根據什麼策略,應該清除哪些資料。
比如,最不經常被訪問的資料,最久沒有訪問到的資料。

4. 命中率
Cache的資料被選中的比率
5. 分級Cache
有些Cache有分級的概念。比如,幾乎所有的Cache都支援Region分割槽的概念。可以指定某一類的資料存放在特定的Region裡面。JBoss Cache可以支援更多的級別。
6. 分散式Cache
分佈在不同計算機上的Cache
7. 鎖,事務,資料同步
一些Cache提供了完善的鎖,事務支援。
以上特性,大部分Cache都有相應的API支援。這些API很直觀,也很簡單

1)memcached
是一個C/S結構的遠端Cache實現,主要使用在Shared Nothing Architecture中.
不同計算機上的應用程式通過一個IP地址來訪問memcahced Server。

同一個key對應的資料,只存在於一臺memcached server的一份記憶體中.
memcached server也可以部署在多臺計算機上。Memcached通過key的hashcode來判斷從哪臺memcached server上存取資料資料。我們可以看到,同一個key對應的資料,還是隻存在於一臺memcached server的一份記憶體中.所以,memcached不存在資料同步的問題.
memcached由於是遠端Cache,要求放到Cache的Key和Value都是Serializable.
2)JBoss Cache 
Cluster Cache的資料同步,需要網路通訊,這就要求放到Cache的資料是Serializable。

JBoss Cache提出了POJO(Plain Ordinary Java Objects的縮寫,它通指沒有使用Entity Beans的普通java物件,可以把POJO作為支援業務邏輯的協助類,POJO有一些private的引數作為物件的屬性。然後針對每個引數定義了get和set方法作為訪問的介面,也被稱為Data物件) Cache的概念,意思是資料不是Serializable,一樣能夠在Cluster中同步
JBoss POJO Cache通過AOP機制(Aspect Oriented Programming 面向切面程式設計,也叫面向方面程式設計,是目前軟體開發中的一個熱點,也是Spring框架中的一個重要內容。利用AOP可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程式的可重用性,同時提高了開發的效率),支援物件同步,支援物件屬性的同步,支援關聯物件的Cache,支援繼承,集合,Query,並支援不同級別的事務,儼然一個小型記憶體資料庫級別的資料儲存系統。 
JBoss POJO Cache的物件管理類似Hibernate,JDO,JPA等ORM工具,同樣有Detach和Attach的概念.Attach就是put,把物件放入到Cache中。Detach就是remove,把物件從Cache中刪除。put的時候,放進去的是個乾乾淨淨的POJO,出來的時候,就是Enhanced Object,裡面夾雜了很多Interceptor程式碼,監聽物件的方法。


1)Cache的操作通常有4個,get,put,remove,clear。
對 於Cluster Cache來說,讀操作(get)肯定是Local方法,只需要從本臺計算機記憶體中獲取資料。Remove/clear兩個寫操作,肯定是Remote方 法,需要和Cluster其他計算機進行同步。Put這個寫方法,可以是Local,也可以是Remote的。 Local Put比起Remote Put的優勢很明顯,所以,通常的Cluster Cache都採用Local Put的策略。
2)Memcached可以看作是Center Cache。
Center Cache和Cluster Cache的特性比較如下:
Center Cache沒有同步問題,所以,remove/clear的時候,比較有優勢,不需要把通知傳送到好幾個計算機上。
但是,Center Cache的所有操作,get/put/remove/clear都是Remote操作。而Cluster Cache的get/put都是Local操作,所以,Cluster Cache在get/put操作上具有優勢。Local get/put在關聯物件的組裝和分拆方面,優勢比較明顯。 
3)Cache可以用在任何地方,比如,頁面快取。但Cache的最常用場景是用在ORM(物件關係對映,提供了概念性的、易於理解的模型化資料的方法)中,比如,Hibernate(一個開放原始碼的物件關係對映框架,它對JDBC進行了非常輕量級的物件封裝,使得Java程式設計師可以隨心所欲的使用物件程式設計思維來操縱資料庫),JDO(Java Data Object,是Java物件持久化的新的規範,也是一個用於存取某種資料倉庫中的物件的標準化API。JDO提供了透明的物件儲存),JPA(Java Persistence API.JPA通過JDK 5.0註解或XML描述物件-關係表的對映關係,並將執行期的實體物件持久化到資料庫中)中。ORM Cache的使用方法有個原則——不要把沒有Commit的修改資料放入到快取中。這是為了防止Read Dirty。資料庫事務分為兩種,一種是讀事務,不修改資料,一種是寫事務,修改資料。 

4)ORM Cache一般分為兩種。一種是ID Cache(ORM文件中稱為二級Cache),用來存放Entity ID對應的Entity物件;一種是Query Cache,用來存放一條查詢語句對應的查詢結果集.Query Cache的效能需要考慮幾個方面。比如,Query Key。Query Key一般由2個部分組成:Query String部分,SQL, HQL, EQL, or OQL;引數部分。尋找Query Key的對應資料的時候,Query Key的比較有兩個步驟,先hash,然後equals 

原文地址:http://blog.csdn.net/smaychun/article/details/8569152