package jia5.memcached;
import java.util.Date;
import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;
/**
* 使用memcached的缓存实用类.
*
* @author 原作者:铁木箱子 完善:周枫
*
*/
public class Mecached
{
// private static Logger logger=Logger.getLogger(Mecached.class);
// 创建全局的唯一实例
protected static MemCachedClient mcc = new MemCachedClient();
protected static Mecached memCached = new Mecached();
// 设置与缓存服务器的连接池
static {
// String ip=Configuration.getMemcacheIp();
// String port=Configuration.getMemcachePort();
// 服务器列表和其权重,个人memcached地址和端口号
//String[] servers={ip+":"+port};
String[] servers={"localhost: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 ); //设置读取超时为3秒
pool.setSocketConnectTO( 0 ); //0表示不设置连接超时
// 初始化连接池
pool.initialize();
mcc.setPrimitiveAsString( true );//设置序列化
}
/**
* 保护型构造方法,不允许实例化!
*
*/
protected Mecached()
{
}
/**
* 获取唯一实例.
* @return
*/
public static Mecached getInstance()
{
return memCached;
}
/**
* 添加一个指定的值到缓存中.
* @param key
* @param value
* @return
*/
public static boolean add(String key, Object value)
{
return mcc.add(key, value);
//return mcc.set(key, value);
}
public boolean add(String key, Object value, Date expiry)
{
return mcc.add(key, value, expiry);
}
/**
* 替换一个指定的值到缓存中.
* @param key
* @param value
* @return
*/
public static 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);
}
/**
* 删除一个指定的值到缓存中.
* @param key
* @param value
* @return
*/
public static boolean delete(String key)
{
return mcc.delete(key);
}
/**
* 根据指定的关键字获取对象.
* @param key
* @return
*/
public static Object get(String key)
{
return mcc.get(key);
}
public static void main(String[] args)
{
Mecached.add("test", "test");
Mecached.add("abc", "test");
Mecached.add("def", "test");
Mecached.add("ghi", "test");
System.out.println(memCached.get("test"));
//Mecached.delete("test");
/*Map<String,Hit> hitMap=(Map<String, Hit>) Mecached.get("hit");
if(hitMap==null) {
logger.info("hitMap is null");
} else {
logger.info("hitMap size is:"+hitMap.size());
}
Map<String,AreaInfo> areaMap=(Map<String, AreaInfo>) Mecached.get("area");
if(areaMap==null) {
logger.info("areaMap is null");
} else {
logger.info("areaMap size is:"+areaMap.size());
}
Map<String,Object> areaIpMap=(Map<String, Object>) Mecached.get("area_ip");
if(areaIpMap==null) {
logger.info("areaIpMap is null");
} else {
logger.info("areaIpMap size is:"+areaIpMap.size());
}
Map<String,AreaInfo> ispMap=(Map<String, AreaInfo>) Mecached.get("isp");
if(ispMap==null) {
logger.info("ispMap is null");
} else {
logger.info("ispMap size is:"+ispMap.size());
}
Map<String,Object> ispIpMap=(Map<String, Object>) Mecached.get("isp_ip");
if(ispIpMap==null) {
logger.info("ispIpMap is null");
} else {
logger.info("ispIpMap size is:"+ispIpMap.size());
}
Map<String,AreaInfo> statusCodeMap=(Map<String, AreaInfo>) Mecached.get("status");
if(statusCodeMap==null) {
logger.info("statusCodeMap is null");
} else {
logger.info("statusCodeMap size is:"+statusCodeMap.size());
}
Map<String,Object> statusCodeIpMap=(Map<String, Object>) Mecached.get("status_ip");
if(statusCodeIpMap==null) {
logger.info("statusCodeIpMap is null");
} else {
logger.info("statusCodeIpMap size is:"+statusCodeIpMap.size());
}
logger.info("areasqlsize size is:"+Mecached.get("areasqlsize"));
logger.info("ispsqlsize size is:"+Mecached.get("ispsqlsize"));
logger.info("statussqlsize size is:"+Mecached.get("statussqlsize"));
logger.info("hitsqlsize size is:"+Mecached.get("hitsqlsize"));
logger.info("isMonitor is:"+Mecached.get("isMonitor"));
logger.info("size is:"+Mecached.get("testValue"));*/
}
}