終於把nginx+memcached+tomcat集羣windows下佈置完成,可是遇到java客戶端提交數據到memcached的問題,上網看了好多人的帖子,發現了3種方法 html
1. 三種API比較
1) memcached client for java java
較早推出的memcached JAVA客戶端API,應用普遍,運行比較穩定。 nginx
2) spymemcached git
A simple, asynchronous, single-threaded memcached client written in java. 支持異步,單線程的memcached客戶端,用到了java1.5版本的concurrent和nio,存取速度會高於前者,可是穩定性很差,測試中常 報timeOut等相關異常。 github
3) xmemcached 算法
XMemcached 一樣是基於java nio的客戶端,java nio相比於傳統阻塞io模型來講,有效率高(特別在高併發下)和資源耗費相對較少的優勢。傳統阻塞IO爲了提升效率,須要建立必定數量的鏈接造成鏈接 池,而nio僅須要一個鏈接便可(固然,nio也是能夠作池化處理),相對來講減小了線程建立和切換的開銷,這一點在高併發下特別明顯。所以 XMemcached與Spymemcached在性能都很是優秀,在某些方面(存儲的數據比較小的狀況下)Xmemcached比 Spymemcached的表現更爲優秀,具體能夠看這個Java Memcached Clients Benchmark。 windows
2. 建議 api
因爲memcached client for java發佈了新版本,性能上有所提升,而且運行穩定,因此建議使用memcached client for java。 緩存
XMemcached 也使用得比較普遍,並且有較詳細的中文API文檔,具備以下特色:高性能、支持完整的協議、支持客戶端分佈、容許設置節點權重、動態增刪節點、支持 JMX、與Spring框架和Hibernate-memcached的集成、客戶端鏈接池、可擴展性好等。 tomcat
我使用的是建議方法memcached client for java,
Memcached-Java-Client官網jar包的下載地址:
https://github.com/gwhalin/Memcached-Java-Client/downloads
Memcached-Java-Client的說明文檔:
https://github.com/gwhalin/Memcached-Java-Client
具體實現步驟爲:
1.將jar包引入項目中,我引入了4個commons-pool-1.5.6.jar,java_memcached-release_2.6.2.jar,slf4j-api-1.6.1.jar,slf4j-simple-1.6.1.jar
2.寫測試代碼:
|
3.測試階段
1)取消cache.add("zf",18)註釋,將cache.replace("zf", 19);和cache.delete("zf");註釋掉,增長zf到memcached中
2)將cache.add("zf",18);cache.replace("zf", 19);和cache.delete("zf");註釋,輸出結果爲剛纔添加的內容,表示該值已經存入memcached中
3) 將cache.delete("zf");取消註釋,再運行,控制檯輸出 zf get value : null,該值已刪除
其餘測試方法:
使用telnet命令語句查看:
1)cmd中輸入telnet 192.168.88.137 11211(本身memcached地址及端口號)
2)輸入命令stats,查看 STAT curr_items 數量,增長、修改、刪除此數量隨之變化
具體memcached輸入stats命令解釋以下:(轉載:http://www.cnblogs.com/suger/archive/2011/09/06/2168319.html)
STAT pid 1552
STAT uptime 3792
STAT time 1262517674
STAT version 1.2.6
STAT pointer_size 32
STAT curr_items 1
STAT total_items 2
STAT bytes 593
STAT curr_connections 2
STAT total_connections 28
STAT connection_structures 9
STAT cmd_get 3
STAT cmd_set 2
STAT get_hits 2
STAT get_misses 1
STAT evictions 0
STAT bytes_read 1284
STAT bytes_written 5362
STAT limit_maxbytes 67108864
STAT threads 1
END
這裏顯示了不少狀態信息,下邊詳細解釋每一個狀態項:
1. pid: memcached服務進程的進程ID
2. uptime: memcached服務從啓動到當前所通過的時間,單位是秒。
3. time: memcached服務器所在主機當前系統的時間,單位是秒。
4. version: memcached組件的版本。這裏是我當前使用的1.2.6。
5. pointer_size:服務器所在主機操做系統的指針大小,通常爲32或64.
6. curr_items:表示當前緩存中存放的全部緩存對象的數量。不包括目前已經從緩存中刪除的對象。
7. total_items:表示從memcached服務啓動到當前時間,系統存儲過的全部對象的數量,包括目前已經從緩存中刪除的對象。
8. bytes:表示系統存儲緩存對象所使用的存儲空間,單位爲字節。
9. curr_connections:表示當前系統打開的鏈接數。
10. total_connections:表示從memcached服務啓動到當前時間,系統打開過的鏈接的總數。
11. connection_structures:表示從memcached服務啓動到當前時間,被服務器分配的鏈接結構的數量,這個解釋是協議文檔給的,具體什麼意思,我目前還沒搞明白。
12. cmd_get:累積獲取數據的數量,這裏是3,由於我測試過3次,第一次由於沒有序列化對象,因此獲取數據失敗,是null,後邊有2次是我用不一樣對象測試了2次。
13. cmd_set:累積保存數據的樹立數量,這裏是2.雖然我存儲了3次,可是第一次由於沒有序列化,因此沒有保存到緩存,也就沒有記錄。
14. get_hits:表示獲取數據成功的次數。
15. get_misses:表示獲取數據失敗的次數。
16. evictions:爲了給新的數據項目釋放空間,從緩存移除的緩存對象的數目。好比超過緩存大小時根據LRU算法移除的對象,以及過時的對象。
17. bytes_read:memcached服務器從網絡讀取的總的字節數。
18. bytes_written:memcached服務器發送到網絡的總的字節數。
19. limit_maxbytes:memcached服務緩存容許使用的最大字節數。這裏爲67108864字節,也就是是64M.與咱們啓動memcached服務設置的大小一致。
20. threads:被請求的工做線程的總數量。這個解釋是協議文檔給的。