使用MEMCACHED實現緩存

什麼是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應用的速度、提升可擴展性。併發

web_6

windows下安裝memcached異步

一、下載服務端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

 

 

二、以管理員身份運行 cmd.exe,並轉至memcached所在文件夾

好比:
cd D:\memcached
注意:若是不以管理員身份運行,將獲得報錯「failed to install service or service already installed」
maven

三、安裝memcached

d:\memcached memcached.exe -d install
(以後屏幕無任何提示,能夠再[控制面板]->[管理工具]->[服務]中查看到memcached)   

四、啓動memcached

(1)啓動方法1:

d:\memcached> memcached.exe -d start
以後屏幕無任何提示,可是在「任務管理器」中勾選「顯示全部用戶進程」,此時能夠看到memcached.exe進程正在運行
默認端口11211,外部訪問須要開放該端口,不然沒法成功鏈接。

(2)啓動方法2:

[控制面板]->[管理工具]->[服務] 找到 memcached 服務,雙擊它打開以下圖

啓動類型:選擇【自動】
服務狀態:點擊下面的【啓動】
備註:可執行文件的路徑和我上面所說的路徑有些區別能夠忽略 

五、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

六、中止memcached

D:\memcached> memcached.exe -d stop

七、卸載memcached

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"));
相關文章
相關標籤/搜索