——Memcached的安裝、使用實例
文:阿蜜果
日期:2011-2-15
版權所有,轉載請注明出處:http://www.tkk7.com/amigoxie/archive/2011/02/15/344381.html
1、Memcached介紹
Memcached是高性能的,分布式的內存對象緩存系統,用于在動態應用中減少數據庫負載,提升訪問速度。Memcached由Danga Interactive開發,用于提升LiveJournal.com訪問速度的。LJ每秒動態頁面訪問量幾千次,用戶700萬。Memcached將數據庫負載大幅度降低,更好的分配資源,更快速訪問。
Memcached的最新版是采用c語言進行開發和設計的,它是一個應用軟件,是作為緩存服務器的服務器端運行在服務器上的,需要使用特定的語言編寫客戶端與其進行通信來進行數據的緩存和獲取。
在系統中,通常將Memcached安裝運行在服務器上,然后通過對需要的數據進行緩存,所有數據的緩存設置和存取操作,以及數據的更新后替換操作全部需要程序來進行。
2、Memcached的安裝
2.1 主程序的安裝
一般的服務器都是采用Linux,筆者只是講述在Windows上如何安裝Memcached,在Linux上的安裝請參考網上其它資料。
Windows版本的下載地址為:http://code.jellycan.com/memcached/
當前win32的最新版本是1.2.6,下載頁面參考如下:

在上圖中點擊“memcached-1.2.6-win32-bin.zip”進入下載頁面,下載后,將其解壓到D盤下,解壓后的D:"memcached-1.2.6-win32-bin目錄下有一個memcached.exe。
在Windows的命令行(cmd命令進入命令行)窗口進入該目錄,首先運行:
memcached.exe -d install
上面這行表示安裝Memcached為服務,這樣才能正常運行。接著運行如下這樣來啟動Memcached,還可指定-l參數,表示啟動的IP,-m表示緩存大?。?/p>
memcached.exe -d start
若指定了-m,則表示緩存大小為-m后的數字,單位是M,例如:
memcached.exe –l 127.0.0.1 –m 32 -d start
運行參考如下圖所示:

2.2 Java客戶端的安裝
下載地址為:https://github.com/gwhalin/Memcached-Java-Client
下載頁面參考如下:

在上圖中點擊右側區域的“Downloads”,彈出的下載小窗口如下圖:

當前最新的版本是2.5.2,點擊“java_memcached-release_2.5.2.zip”下載。下載后解壓,目錄結構如下圖所示:

在應用中,需要將“java_memcached-release_2.5.2.jar”包拷貝到Java項目中。
3、Memcached的使用
3.1 創建項目
在MyEclipse中創建一個名為memcacheddemo的測試項目,src放源代碼,bin放classes文件,lib放jar包,并將java_memcached-release_2.5.2.jar拷貝到lib目錄中,目錄結構如下:

3.2 SockIOPool類及其常用方法
SockIOPool是socket連接池類,常用方法如下:
l setServers(String[] servers):設置服務器信息數組;
l setWeights(String[] weights):設置服務器權重數組;
l setInitConn(int count):設置初始連接數;
l setMinConn(int minConn):設置最小連接數;
l setMaxConn(int maxConn):設置最大連接數;
l setMaxIdle(long arg0):設置最大處理時間;
l setMaintSleep(long arg0):主線程的睡眠時間;
l initialize():初始化連接池。
3.3 MemCachedClient類及其常用方法
MemCachedClient類用于對Memcached內存對象緩存系統進行操作,常用方法如下:
l add(String key, Object value):添加一個鍵值對到緩存中;
l add(String key, Object value,Date expires):添加一個鍵值對到緩存中,并設置其超時時間;
l set(String key, Object value):在緩存中設置一個鍵的值;
l set(String key, Object value, Date expires):在緩存中設置一個鍵的值,并設置其超時時間;
l get(String key):獲得某個鍵的值。
l incr(String key):為某個鍵上的值執行+1操作;
l decr(String key):為某個鍵上的值執行-1操作;
l replace(String key, String value):將某個鍵的值替換成新的值;
l replace(String key, String value, Date expires):將某個鍵的值替換成新的值,并設置其超時時間。
3.4 使用實例
在memcacheddemo工程的源碼目錄創建測試的Java類MemcachedTest,該類的代碼參考如下:
import java.util.Date;

import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;


/** *//**
* 使用memcached的緩存測試類.
* @author 阿蜜果
*/

public class MemcachedTest
{
// 創建全局的唯一實例
protected static MemCachedClient mcc = new MemCachedClient();

protected static MemcachedTest memCached = new MemcachedTest();

// 設置與緩存服務器的連接池

static
{
// 服務器列表和其權重

String[] servers =
{"127.0.0.1:11211"};

Integer[] weights =
{3};

// 獲取socket連接池的實例對象
SockIOPool pool = SockIOPool.getInstance();

// 設置服務器信息
pool.setServers(servers);
pool.setWeights(weights);

// 設置初始連接數、最小和最大連接數以及最大處理時間
pool.setInitConn(5);
pool.setMinConn(5);
pool.setMaxConn(250);
pool.setMaxIdle(1000 * 60 * 60 * 6);

// 設置主線程的睡眠時間
pool.setMaintSleep(30);

// 設置TCP的參數,連接超時等
pool.setNagle(false);
pool.setSocketTO(3000);
pool.setSocketConnectTO(0);

// 初始化連接池
pool.initialize();

// 壓縮設置,超過指定大?。▎挝粸镵)的數據都會被壓縮
mcc.setCompressEnable(true);
mcc.setCompressThreshold(64 * 1024);
}


/** *//**
* 保護型構造方法,不允許實例化
*/

protected MemcachedTest()
{

}


/** *//**
* 獲取唯一實例.
* @return
*/

public static MemcachedTest getInstance()
{
return memCached;
}


/** *//**
* 添加一個指定的值到緩存中.
* @param key 鍵
* @param value 值
* @return 在緩存中若該key不存在,并成功添加返回true,否則將返回false
*/

public boolean add(String key, Object value)
{
return mcc.add(key, value);
}


/** *//**
* 添加一個鍵值對到緩存中.
* @param key 鍵
* @param value 值
* @param expires 超時時間
* @return 在緩存中若該key不存在,并成功添加返回true,否則將返回false
*/

public boolean add(String key, Object value, Date expires)
{
return mcc.add(key, value, expires);
}


/** *//**
* 將某個鍵的值改變成新值,首先需要保證該鍵存在.
* @param key 鍵
* @param value 值
* @return 成功返回true,失敗返回false
*/

public boolean replace(String key, Object value)
{
return mcc.replace(key, value);
}


/** *//**
* 將某個鍵的值改變成新值,首先需要保證該鍵存在.
* @param key 鍵
* @param value 值
* @param expires 超時時間
* @return 成功返回true,失敗返回false
*/

public boolean replace(String key, Object value, Date expires)
{
return mcc.replace(key, value, expires);
}


/** *//**
* 添加一個指定的值到緩存中.
* @param key
* @param value
* @return 成功返回true,否則返回false
*/

public boolean set(String key, Object value)
{
return mcc.set(key, value);
}

/** *//**
* 添加一個指定的值到緩存中,并設置其超時時間.
* @param key 鍵
* @param value 值
* @param expires 超時時間
* @return 成功返回true,否則返回false
*/

public boolean set(String key, Object value, int expires)
{
return mcc.set(key, value, expires);
}

/** *//**
* 根據指定的關鍵字獲取對象.
* @param key
* @return 返回value
*/

public Object get(String key)
{
return mcc.get(key);
}


/** *//**
* 將指定key的value值+1,將返回最后的value值
* @param key
* @return 返回最后的value值
*/

public long incr(String key)
{
return mcc.incr(key);
}

/** *//**
* 將指定key的value值-1,將返回最后的value值
* @param key
* @return 返回最后的value值
*/

public long decr(String key)
{
return mcc.decr(key);
}

/** *//**
* 測試方法
* @param args
*/

public static void main(String[] args)
{
MemcachedTest cache = MemcachedTest.getInstance();
cache.set("count", 123);
System.out.println("count=" + cache.get("count"));
boolean flag = cache.add("schedule_2", "0");
System.out.println("flag=" + flag);
System.out.println("schedule_2=" + cache.get("schedule_2"));
}
}
運行結果為:
count=123
flag=true
schedule_2=0
4、附錄
《Memcached Java客戶端編程》:
http://sailinglee.javaeye.com/blog/752847
posted on 2011-02-15 18:06
阿蜜果 閱讀(3003)
評論(3) 編輯 收藏 所屬分類:
Java 、
解決方案