发表于: 2017-10-26 23:37:12
1 719
今天完成的事
找一个memcached工具类,并改成Xmemcache的工具类
private static MemcachedClient cachedClient;
private static Logger MemcachedLog = Logger.getLogger(LoginService.class);
/**
* 向缓存添加新的键值对。如果键已经存在,则之前的值将被替换.
* @param key 键
* @param value 值
* @return boolean
*/
public static boolean set(String key,int expire, Object value) {
return setExp(key,expire,value);
}
/**
* 向缓存添加新的键值对。如果键已经存在,则之前的值将被替换.
* @param key 键
* @param value 值
* @param expire 过期时间 New Date(1000*10):十秒后过期
* @return boolean
*/
public static boolean set(String key, Object value, int expire) {
return setExp(key, expire,value);
}
/**
* 向缓存添加新的键值对。如果键已经存在,则之前的值将被替换.
* @param key 键
* @param value 值
* @param expire 过期时间 New Date(1000*10):十秒后过期
* @return boolean
*/
private static boolean setExp(String key,int expire ,Object value) {
boolean flag = false;
try {
flag = cachedClient.set(key,expire,value);
} catch (Exception e) {
MemcachedLog.error("Memcached set方法报错,key值:" + key + "\r\n" + exceptionWrite(e));
}
return flag;
}
/**
* 仅当缓存中不存在键时,add 命令才会向缓存中添加一个键值对.
* @param key 键
* @param value 值
* @return boolean
*/
public static boolean add(String key, Object value,int expire) {
return addExp(key, value,expire);
}
/**
* 仅当缓存中不存在键时,add 命令才会向缓存中添加一个键值对.
* @param key 键
* @param value 值
* @param expire 过期时间 New Date(1000*10):十秒后过期
* @return boolean
*/
private static boolean addExp(String key, Object value, int expire) {
boolean flag = false;
try {
flag = cachedClient.add(key,expire,value);
} catch (Exception e) {
MemcachedLog.error("Memcached add方法报错,key值:" + key + "\r\n" + exceptionWrite(e));
}
return flag;
}
/**
* 仅当键已经存在时,replace 命令才会替换缓存中的键.
* @param key 键
* @param value 值
* @return boolean
*/
public static boolean replace(String key, int expire,Object value) {
return replaceExp(key,expire,value);
}
/**
* 仅当键已经存在时,replace 命令才会替换缓存中的键.
* @param key 键
* @param value 值
* @param expire 过期时间 New Date(1000*10):十秒后过期
* @return boolean
*/
public static boolean replaceTensecond(String key, int expire,Object value) {
return replaceExp(key,expire,value);
}
/**
* 仅当键已经存在时,replace 命令才会替换缓存中的键.
* @param key 键
* @param value 值
* @param expire 过期时间 New Date(1000*10):十秒后过期
* @return boolean
*/
private static boolean replaceExp(String key, int expire,Object value) {
boolean flag = false;
try {
flag = cachedClient.replace(key,expire,value);
} catch (Exception e) {
MemcachedLog.error("Memcached replace方法报错,key值:" + key + "\r\n" + exceptionWrite(e));
}
return flag;
}
/**
* get 命令用于检索与之前添加的键值对相关的值.
* @param key 键
* @return boolean
*/
public static Object get(String key) {
Object obj = null;
try {
obj = cachedClient.get(key);
} catch (Exception e) {
MemcachedLog.error("Memcached get方法报错,key值:" + key + "\r\n" + exceptionWrite(e));
}
return obj;
}
/**
* 删除 memcached 中的任何现有值.
* @param key 键
* @return boolean
*/
public static boolean delete(String key,int expire) {
return deleteExp(key,0);
}
/**
* 删除 memcached 中的任何现有值.
* @param key 键
* @return boolean
*/
public static boolean deleteTensecond(String key) {
return deleteExp(key, 0);
}
/**
* 删除 memcached 中的任何现有值.
* @param key 键
* @param expire 过期时间 New Date(1000*10):十秒后过期
* @return boolean
*/
@SuppressWarnings("deprecation")
private static boolean deleteExp(String key, int expire) {
boolean flag = false;
try {
flag = cachedClient.delete(key, 10);
} catch (Exception e) {
MemcachedLog.error("Memcached delete方法报错,key值:" + key + "\r\n" + exceptionWrite(e));
}
return flag;
}
/**
* 清理缓存中的所有键/值对.
* @return boolean
*/
public static boolean flashAll() {
try {
cachedClient.flushAll();
} catch (Exception e) {
MemcachedLog.error("Memcached flashAll方法报错\r\n" + exceptionWrite(e));
}
return true;
}
/**
* 返回异常栈信息,String类型.
* @param e Exception
* @return boolean
*/
private static String exceptionWrite(Exception e) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
pw.flush();
return sw.toString();
}
在改的过程中第一次会看源码了
这是原来找的mem工具类的入参格式
这是xme源码的格式
在这个过程中发现Xme没有me好用,源码中的接口都没有mem中的全
这个是xme的set接口
而mem的set接口
Xme必须要设置过期时间,可有些应用场景就满足不了,比如只存账户和密码,mem就可以自动帮我设置一个过期时间
改了Service的代码
改工具类的时候有报错,就先注释了
重写测试类,不用工具类向缓存 存值
遇到的问题:
又一次遇到了无法加载applacationcontext Failed to load ApplicationContext
排查了昨天的路径问题,也没发先问题,最后程远师兄帮我看了报错信息,里面说的很清楚什么位置有问题,我竟然没发现
空指针的问题 从缓存获取一条数据,出现空指针报错,后来问题出现在memcache根本就没连接上
从缓存获取的值无法转换为String, toString不好使,最后问师兄用(String)的方法
明天的计划:
准备小课堂
继续memcache,不想用Xmemcache了,打算回到memcache,成本也不大,因为之前的配置文件还留
师兄说我在memcache上还要有几个坑要踩,博滔也说缓存让我好好看看,我得做好准备
收获:
突然就会看一些源代码了,可能这个源代码比较简单吧
自己写了测试类和改工具类,虽然花了很多时间,但是把memcache的纸老虎皮捅破了,开始觉得有把握了
稍微清楚了一些xme和me的差别
任务进度:任务6步骤2
任务开始时间:2017-10-21
预计demo时间:2017-10-26
第一次延期5天到10.31
禅道:http://task.ptteng.com/zentao/project-task-276.html
评论