什麼是memcachedjava
Memcached是一個自由開源的,高性能,分佈式內存對象緩存系統。web
Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric爲首開發的一款軟件。如今已成爲mixi、hatena、Facebook、Vox、LiveJournal等衆多服務中提升Web應用擴展性的重要因素。數據庫
Memcached是一種基於內存的key-value存儲,用來存儲小塊的任意數據(字符串、對象)。這些數據能夠是數據庫調用、API調用或者是頁面渲染的結果。windows
Memcached簡潔而強大。它的簡潔設計便於快速開發,減輕開發難度,解決了大數據量緩存的不少問題。它的API兼容大部分流行的開發語言。緩存
本質上,它是一個簡潔的key-value存儲系統。服務器
通常的使用目的是,經過緩存數據庫查詢結果,減小數據庫訪問次數,以提升動態Web應用的速度、提升可擴展性。併發
windows下安裝memcached異步
32bit:下載 memcached-win32-1.4.4-14.zip(直接下)裏面包含6個文件,將解壓後的文件夾隨便放在什麼位置(例如:D:\memcached)。
memcached-win32-1.4.4-14.zip下載頁面:http://blog.couchbase.com/memcached-144-windows-32-bit-binary-now-available async
好比:
cd D:\memcached
注意:若是不以管理員身份運行,將獲得報錯「failed to install service or service already installed」
maven
d:\memcached memcached.exe -d install
(以後屏幕無任何提示,能夠再[控制面板]->[管理工具]->[服務]中查看到memcached)
d:\memcached> memcached.exe -d start
以後屏幕無任何提示,可是在「任務管理器」中勾選「顯示全部用戶進程」,此時能夠看到memcached.exe進程正在運行
默認端口11211,外部訪問須要開放該端口,不然沒法成功鏈接。
[控制面板]->[管理工具]->[服務] 找到 memcached 服務,雙擊它打開以下圖
啓動類型:選擇【自動】
服務狀態:點擊下面的【啓動】
備註:可執行文件的路徑和我上面所說的路徑有些區別能夠忽略
-p 監聽的端口
-l 鏈接的IP地址, 默認是本機
-d start 啓動memcached服務
-d restart 重起memcached服務
-d stop|shutdown 關閉正在運行的memcached服務
-d install 安裝memcached服務
-d uninstall 卸載memcached服務
-u 以的身份運行 (僅在以root運行的時候有效)
-m 最大內存使用,單位MB。默認64MB
-M 內存耗盡時返回錯誤,而不是刪除項
-c 最大同時鏈接數,默認是1024
-f 塊大小增加因子,默認是1.25
-n 最小分配空間,key+value+flags默認是48
-h 顯示幫助
設置參數時須要先中止memcached,而後用命令行設置,好比:
D:\memcached> memcached.exe -m 1 -d start
D:\memcached> memcached.exe -d stop
D:\memcached> memcached.exe -d uninstall
windows下須要經過修改註冊表信息進行設置,打開註冊表,找
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached
在其中有一個「ImagePath」項,值爲:
"D:\memcached\memcached.exe" -d runservice
在後面加上「-m 1024 -c 2048 -p 11210」。等便可。重啓服務後生效
經過java語言操做memcached
三種API的比較
(1)較早推出的memcached JAVA客戶端API,應用普遍,運行比較穩定。
(2)A simple, asynchronous, single-threaded memcached client written in java. 支持異步,單線程的memcached客戶端,用到了java1.5版本的concurrent和nio,存取速度會高於前者,可是穩定性很差,測試中常 報timeOut等相關異常。
(3)XMemcached一樣是基於java nio的客戶端,java nio相比於傳統阻塞io模型來講,有效率高(特別在高併發下)和資源耗費相對較少的優勢。傳統阻塞IO爲了提升效率,須要建立必定數量的鏈接造成鏈接 池,而nio僅須要一個鏈接便可(固然,nio也是能夠作池化處理),相對來講減小了線程建立和切換的開銷,這一點在高併發下特別明顯。所以 XMemcached與Spymemcached在性能都很是優秀,在某些方面(存儲的數據比較小的狀況下)Xmemcached比 Spymemcached的表現更爲優秀,具體能夠看這個Java Memcached Clients Benchmark。
使用XMemcached的示例代碼
1. 添加maven依賴
<dependency> <groupId>com.googlecode.xmemcached</groupId> <artifactId>xmemcached</artifactId> <version>2.4.0</version> </dependency>
2. 示例代碼
MemcachedClientBuilder memcachedClientBuilder = new XMemcachedClientBuilder("localhost:11211"); MemcachedClient client = memcachedClientBuilder.build(); //存入一個字符串,第一個參數爲key,第二個參數爲過時時間,單位爲秒,0表明一個月 //第三個參數爲具體的值 client.add("stringKey",0,"這是個人字符串"); //從memcached服務器中根據一個鍵獲取一個字符串值 String s = client.get("stringKey"); System.out.println(s); //存入一個List集合 List list = new ArrayList(); list.add("aa"); list.add("bb"); client.add("list",0,list); //根據key獲取一個list list = client.get("list"); System.out.println(list); //存入一個對象,若是須要存入一個對象,該對象必須是可序列化的 //java中經過實現接口java.io.Serializable 來表明該類可序列化 // class Student implements java.io.Serializable Student stu = new Student(); stu.setId(12); stu.setName("張三"); client.add("obj",0,stu); System.out.println(client.get("obj"));