一、memcached是什么?
許多Web應用都將數據保存到RDBMS中,應用服務器從中讀取數據並在瀏覽器中顯示。但隨着數據量的增大、訪問的集中,就會出現RDBMS的負擔加重、數據庫響應惡化、網站顯示延遲等重大影響。
這時就該memcached大顯身手了。memcached是高性能的分布式內存緩存服務器。一般的使用目的是,通過緩存數據庫查詢結果,減少數據庫訪問次數,以提高動態Web應用的速度、提高可擴展性。
圖1 一般情況下memcached的用途
二、安裝memcached
1. Memcached-win64 下載:
a. 下載最新版:http://blog.couchbase.com/memcached-windows-64-bit-pre-release-available
b. 直接下載: memcached-win64-1.4.4-14.zip
D:\WampServer\bin\memcached\memcached.exe
3. 在終端(也即cmd命令界面)下輸入以下命令安裝windows服務:
D:\WampServer\bin\memcached>memcached.exe -d install
4. 再輸入下面命令啟動:
D:\WampServer\bin\memcached>memcached.exe -d start
memcached.exe -l 127.0.0.1 -m 32 -d start(配置內存32M)
5.下載java_memcached-release_1.6.zip,解壓后目錄中的java_memcached-release_1.6.jar
復制到java項目的lib目錄下,然后我們可以來編寫代碼了
package com.memcached;
import java.util.Date;
import com.whalin.MemCached.MemCachedClient;
import com.whalin.MemCached.SockIOPool;
public class memcached {
private static MemCachedClient mcc = new MemCachedClient();
private static memcached mc = new memcached();
//設置與緩存服務器的連接池
static{
//服務器列表和其權重
String[] servers = {"127.0.0.1:11211"};
Integer[] weights = {3};
//獲取socke連接池的實例對象
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();
//壓縮設置,超過指定大小(單位為K)的數據都會被壓縮
//mcc.setCompressEnable(true);
//mcc.setCompressThreshold(64*1024);
}
/**
* 構造函數,不允許實例化
* @param args
*/
private memcached(){
}
/**
* 獲取唯一實例
* @param args
*/
public static memcached getInstance(){
return mc;
}
/**
* 添加一個指定的值到緩存中
* @param args
*/
public boolean add(String key,Object value){
return mcc.add(key, value);
}
public boolean add(String key,Object value,Date expiry){
return mcc.add(key, value, expiry);
}
public boolean replace(String key, Object value){
return mcc.replace(key, value);
}
public boolean replace(String key, Object value, Date expiry){
return mcc.replace(key, value, expiry);
}
public Object get(String key){
return mcc.get(key);
}
public static void main(String[] args) {
memcached cache = memcached.getInstance();
//cache.add("hello", 1234);
System.out.println("get value:"+cache.get("hello"));
}
}
結果:
get value:1234