发表于: 2017-10-26 23:37:12

1 722


今天完成的事

找一个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




返回列表 返回列表
评论

    分享到