|
首先创建MemCached 缓存管理类,此代码测试需要添加 java_memcached-release_2.6.3.jar,commons-pool-1.5.6.jar,slf4j-api-1.6.1.jar,slf4j-simple-1.6.1.jar 这几个jar包
import java.util.Date;
import org.apache.commons.net.telnet.TelnetClient;
import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;
/**
* 缓存管理类
*
* @author @ 2014-4-24
*/
public class MemCachedManager {
/**
* 记录日志
*/
private static LoggerUtil log = LoggerUtil.getInstance(MemCachedManager.class);
/**
* 创建缓存客户端
*/
public static MemCachedClient mcc = new MemCachedClient();
/**
* 缓存管理对象
*/
private static MemCachedManager memCached = null;
private static boolean isSuccess = true;
// 设置与缓存服务器的连接池
static {
//判断缓存是否服务是否开启
TelnetClient telnet = new TelnetClient();
try {
String[] sers="192.168.15.1:11211".split(":");
telnet.connect(sers[0],Integer.parseInt(sers[1]));
} catch (Exception e) {
log.error("缓存初始化错误", e);
isSuccess = false;
}
// 服务器列表和其权重
String[] servers = {"192.168.15.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(1000);
pool.setSocketConnectTO(0);
// 初始化连接池
pool.initialize();
}
/**
* 私有构造方法,不允许实例化!
*
*/
private MemCachedManager() {
}
/**
* 获取唯一实例.
*
* @return 缓存管理对象
*/
public static MemCachedManager getInstance() {
if (memCached == null) {
memCached = new MemCachedManager();
}
return memCached;
}
/**
* 添加一个指定的值到缓存中.
*
* @param key
* 主键
* @param value
* 值
* @return 是否成功
*/
public boolean add(String key, Object value) {
if (isSuccess) {
return mcc.add(key, value);
} else {
return false;
}
}
/**
* 添加一个指定的值到缓存中.
*
* @param key
* 主键
* @param value
* 值
* @param expiry
* 失效时间
* @return 是否成功
*/
public boolean add(String key, Object value, Date expiry) {
if (isSuccess) {
return mcc.add(key, value, expiry);
} else {
return false;
}
}
/**
* 替换缓存
*
* @param key
* 主键
* @param value
* 值
* @return 是否成功
*/
public boolean replace(String key, Object value) {
if (isSuccess) {
return mcc.replace(key, value);
} else {
return false;
}
}
/**
* 替换缓存
*
* @param key
* 主键
* @param value
* 值
* @param expiry
* 失效时间
* @return 是否成功
*/
public boolean replace(String key, Object value, Date expiry) {
if (isSuccess) {
return mcc.replace(key, value, expiry);
} else {
return false;
}
}
/**
* 根据指定的关键字获取对象.
*
* @param key
* 主键
* @return 缓存对象的值
*/
public Object get(String key) {
if (isSuccess) {
return mcc.get(key);
} else {
return null;
}
}
/**删除缓存
* @param key 主键
* @return 是否删除成功
*/
public boolean delete(String key)
{
if (isSuccess) {
return mcc.delete(key);
} else {
return false;
}
}
/**判断缓存是否存在
* @param key 主键
* @return 是否存在
*/
public boolean keyExists(String key) {
if (isSuccess) {
return mcc.keyExists(key);
} else {
return false;
}
}
}
测试:
MemCachedManager cache = MemCachedManager.getInstance();
long startDate = System.currentTimeMillis();
//cache.delete("test2");
//设置失效时间15s, 默认为0,永不失效,此时间最大不能超过30天
//cache.add("test2", "ffff",new Date(15000));
long endDate = System.currentTimeMillis();
long nowDate = (endDate - startDate);
System.out.println(nowDate);
System.out.print(" get value : " + cache.get("test2"));
|
|
|