Xmemcached v2.0.1 發布,一個memcached客戶端
XMemcached是一個高性能memcached客戶端 。 主要特性:
高性能
XMemcached同樣是基于java nio的客戶端,java nio相比于傳統阻塞io模型來說,有效率高(特別在高并發下)和資源耗費相對較少的優點。傳統阻塞IO為了提高效率,需要創建一定數量的連接形成連接池,而nio僅需要一個連接即可(當然,nio也是可以做池化處理),相對來說減少了線程創建和切換的開銷,這一點在高并發下特別明顯。因此XMemcached與Spymemcached在性能都非常優秀,在某些方面(存儲的數據比較小的情況下)Xmemcached比Spymemcached的表現更為優秀,具體可以看這個Java Memcached Clients Benchmark。
支持完整的協議
Xmemcached支持所有的memcached協議,包括1.4.0正式開始使用的二進制協議。
支持客戶端分布
Memcached的分布只能通過客戶端來實現,XMemcached實現了此功能,并且提供了一致性哈希(consistent hash)算法的實現。
允許設置節點權重
XMemcached允許通過設置節點的權重來調節memcached的負載,設置的權重越高,該memcached節點存儲的數據將越多,所承受的負載越大。
動態增刪節點
XMemcached允許通過JMX或者代碼編程實現節點的動態添加或者移除,方便用戶擴展和替換節點等。
支持JMX
XMemcached通過JMX暴露的一些接口,支持client本身的監控和調整,允許動態設置調優參數、查看統計數據、動態增刪節點等。
與Spring框架和Hibernate-memcached的集成
鑒于很多項目已經使用Spring作為IOC容器,因此XMemcached也提供了對Spring框架的集成支持。Hibernate-memcached是一個允許將memcached作為hibernate的二級緩存的開源項目,默認是使用Spymemcached,Xmemcached提供了對這個項目的支持,允許替換Spymemcached.
客戶端連接池
剛才已經提到java nio通常對一個memcached節點使用一個連接,而XMemcached同樣提供了設置連接池的功能,對同一個memcached可以創建N個連接組成連接池來提高客戶端在高并發環境下的表現,而這一切對使用者來說卻是透明的。啟用連接池的前提條件是保證數據之間的獨立性或者數據更新的同步,對同一個節點的各個連接之間是沒有做更新同步的,因此應用需要保證數據之間是相互獨立的或者全部采用CAS更新來保證原子性。
可擴展性
XMemcached是基于java nio框架yanf4j實現的,因此在實現上結構相對清楚,分層比較明晰,在xmemcached 1.2.5之后已經將yanf4j合并到xmemcached,因此不再需要依賴yanf4j,下面是XMemcached的主要類的UML圖:
更新日志
- 將心跳和連接修復線程設置為 daemon 線程。
- 默認關閉客戶端的 shutdown hook,如果需要開啟,可以通過啟動傳參
-Dxmemcached.shutdown.hook.enable=true
。 - 改進了內部日志,更符合習慣。
- 修復二進制協議的 Auth 授權實現。
- 新增
setSelectorPoolSize
可用于單獨設置每個客戶端實例的 NIO Reactor 線程池大小。 - 特別感謝 bmahe,做了很多代碼清理和重構的工作。
- 一些小的內部 Bug 修復,感謝所有貢獻 PR 的朋友。
- 搬遷了文檔和設計了新首頁 http://fnil.net/xmemcached/。