java 仿造memcache_Java MemCached 缓存实现

首先创建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"));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值