在使用Memcach之前,先搞清楚什麼是Memcach以及Memcached?
A.什麼是Memcache?
Memcache是一個高性能的分布式的記憶體對象緩存系統,通過在記憶體裡維護一個統一的巨大的hash表, 它能夠用來存儲各種格式的資料,包括圖像、視訊、檔案以及資料庫檢索的結果等。簡單的 說就是将數 據調用到記憶體中,然後從記憶體中讀取,進而大大提高讀取速度。Memcached是一個高并發的記憶體鍵值對緩存系統,它的主要作用是将資料庫查詢結果,内容,以及其它一些耗時的計算結 果緩存到系統記憶體中,進而加速Web應用程式的響應速度。
B..Memcache和memcached的差別?
其實Memcache是這個項目的名稱,而memcached是它伺服器端的主程式檔案名,知道我的意思了吧。一個是項目名稱,一個是主程式檔案名,在網上看到了很多人不明白,于是混用了。
1..Memcached的安裝【下邊的檔案裡安裝包,可以直接下載下傳】
在1.4.5版本之前,memcached可以被安裝成一個服務,但之後的版本中該功能被移除了。是以memcached的安裝可以分為兩類,第一類是1.4.5之前的版本,另一類是1.4.5之後的版本。
1)安裝memcached < 1.4.5:
1.将下載下傳的檔案解壓到任意目錄。
2. 1.4.5之前版本的memcached會被安裝成一個服務,以administrator打開控制台,運作下面的指令:
c:\memcached\memcached.exe -d install
* 注意将路徑c:\memcached\memcached.exe替換成你本地的安裝路徑。
3.然後使用下面的指令啟動或停止memcached服務:
c:\memcached\memcached.exe -d start
c:\memcached\memcached.exe -d stop
4.例如你想增加memcached所使用的最大記憶體限制,可以修改ImagePath的值:
"c:\memcached\memcached.exe" -d runservice -m 512
* 除了參數'-m 512'之外,你還可以使用其它的參數。通過“c:\memcached\memcached.exe -h”可以查 看所有能使用的參數。
5.如果要解除安裝memcached服務,可以使用下面的指令:
c:\memcached\memcached.exe -d uninstall
2)安裝memcached >= 1.4.5
1.将下載下傳的檔案解壓到任意目錄。
2. 1.4.5之後版本的memcached不能作為Windows服務來運作,可以在指令行中啟動memcache。以 管理者身份打開cmd,然後輸入如下指令:
Memcached-x86 –p 11211 –m 128 –vv
3. memcached啟動選項如下:
選項 說明
-p 使用的TCP端口,預設為11211
-m 最大記憶體大小預設為64m
-vv 用very verbose模式啟動,調試資訊和錯誤輸出到控制台
-d 作為daemon在背景啟動
4.在java中如何使用Memcache
1.添加jar包:【下邊的檔案裡有jar包】
commons-pool-1.5.6.jar、
java_memcached-release_2.6.6.jar、
slf4j-api-1.6.1.jar、
2.添加輔助類MemcachedUtil.java【直接複制 粘貼就行到你的包裡(如:com.wf.ssm.util)】
import java.util.Date;
import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;
public class MemcachedUtil {
private static MemCachedClient cachedClient = new MemCachedClient();
static {
//擷取連接配接池的執行個體
SockIOPool pool = SockIOPool.getInstance();
//伺服器清單及其權重
String[] servers = {"127.0.0.1:11211"};
Integer[] weights = {3};
//設定伺服器資訊
pool.setServers(servers);
pool.setWeights(weights);
//設定初始連接配接數、最小連接配接數、最大連接配接數、最大處理時間
pool.setInitConn(10);
pool.setMinConn(10);
pool.setMaxConn(1000);
pool.setMaxIdle(1000*60*60);
//設定連接配接池守護線程的睡眠時間
pool.setMaintSleep(60);
//設定TCP參數,連接配接逾時
pool.setNagle(false);
pool.setSocketTO(60);
pool.setSocketConnectTO(0);
//初始化并啟動連接配接池
pool.initialize();
//壓縮設定,超過指定大小的都壓縮
// cachedClient.setCompressEnable(true);
// cachedClient.setCompressThreshold(1024*1024);
}
private MemcachedUtil(){
}
public static boolean add(String key, Object value) {
return cachedClient.add(key, value);
}
public static boolean add(String key, Object value, Date expireDate) {
return cachedClient.add(key, value, expireDate);
}
public static boolean add(String key, Object value, Integer millSeconds){
return cachedClient.add(key, value, new Date(new Date().getTime()+millSeconds));
}
public static boolean put(String key, Object value) {
return cachedClient.set(key, value);
}
public static boolean put(String key, Object value, Date expireDate) {
return cachedClient.set(key, value, expireDate);
}
public static boolean put(String key, Object value, Integer millSeconds){
return cachedClient.set(key, value, new Date(new Date().getTime()+millSeconds));
}
public static boolean replace(String key, Object value) {
return cachedClient.replace(key, value);
}
public static boolean replace(String key, Object value, Date expireDate) {
return cachedClient.replace(key, value, expireDate);
}
public static boolean replace(String key, Object value, Integer millSeconds){
return cachedClient.replace(key, value, new Date(new Date().getTime()+millSeconds));
}
public static Object get(String key) {
return cachedClient.get(key);
}
public static Object delete(String key) {
return cachedClient.delete(key);
}
}
3.注意,被添加到緩存的類必須實作接口Serializable。