发表于: 2017-11-05 23:44:03
1 694
今天完成的事情:
寻找一个memached工具类.并做细微改动.有些方法竟然是过时的,,稍作修改还没看逻辑,不知道改的对不对.
private static final Logger logger = Logger.getLogger(MemcachedUtils.class);
private static MemCachedClient cachedClient;
static {
if (cachedClient == null) {
//括号中的名称要和配置文件memcached-context.xml中的名称一致
cachedClient = new MemCachedClient("applicationContext.xml");
}
}
private MemcachedUtils() {}
/**
* 向缓存添加新的键值对。如果键已经存在,则之前的值将被替换。
*
* @param key 键
* @param value 值
* @return
*/
public static boolean set(String key, Object value) {
return setExp(key, value, null);
}
/**
* 向缓存添加新的键值对。如果键已经存在,则之前的值将被替换。
*
* @param key 键
* @param value 值
* @param expire 过期时间 New Date(1000*10):十秒后过期
* @return
*/
public static boolean set(String key, Object value, Date expire) {
return setExp(key, value, expire);
}
/**
* 向缓存添加新的键值对。如果键已经存在,则之前的值将被替换。
*
* @param key 键
* @param value 值
* @param expire 过期时间 New Date(1000*10):十秒后过期
* @return
*/
private static boolean setExp(String key, Object value, Date expire) {
boolean flag = false;
try {
flag = cachedClient.set(key, value, expire);
} catch (Exception e) {
// 记录Memcached日志
logger.error("Memcached set方法报错,key值:" + key + "\r\n");
}
return flag;
}
/**
* 仅当缓存中不存在键时,add 命令才会向缓存中添加一个键值对。
* @param key 键
* @param value 值
* @return
*/
public static boolean add(String key, Object value) {
return addExp(key, value, null);
}
/**
* 仅当缓存中不存在键时,add 命令才会向缓存中添加一个键值对。
*
* @param key 键
* @param value 值
* @param expire 过期时间 New Date(1000*10):十秒后过期
* @return
*/
public static boolean add(String key, Object value, Date expire) {
return addExp(key, value, expire);
}
/**
* 仅当缓存中不存在键时,add 命令才会向缓存中添加一个键值对。
*
* @param key 键
* @param value 值
* @param expire 过期时间 New Date(1000*10):十秒后过期
* @return
*/
private static boolean addExp(String key, Object value, Date expire) {
boolean flag = false;
try {
flag = cachedClient.add(key, value, expire);
} catch (Exception e) {
// 记录Memcached日志
logger.error("Memcached add方法报错,key值:" + key + "\r\n");
}
return flag;
}
/**
* 仅当键已经存在时,replace 命令才会替换缓存中的键。
*
* @param key 键
* @param value 值
* @return
*/
public static boolean replace(String key, Object value) {
return replaceExp(key, value, null);
}
/**
* 仅当键已经存在时,replace 命令才会替换缓存中的键。
*
* @param key 键
* @param value 值
* @param expire 过期时间 New Date(1000*10):十秒后过期
* @return
*/
public static boolean replace(String key, Object value, Date expire) {
return replaceExp(key, value, expire);
}
/**
* 仅当键已经存在时,replace 命令才会替换缓存中的键。
*
* @param key 键
* @param value 值
* @param expire 过期时间 New Date(1000*10):十秒后过期
* @return
*/
private static boolean replaceExp(String key, Object value, Date expire) {
boolean flag = false;
try {
flag = cachedClient.replace(key, value, expire);
} catch (Exception e) {
e.printStackTrace();
logger.error("Memcached replace方法报错,key值:" + key + "\r\n" +
e.getMessage());
}
return flag;
}
/**
* get 命令用于检索与之前添加的键值对相关的值。
*
* @param key 键
* @return
*/
public static Object get(String key) {
Object obj = null;
try {
obj = cachedClient.get(key);
} catch (Exception e) {
e.printStackTrace();
logger.error("Memcached get方法报错,key值:" + key + "\r\n" +
e.getMessage());
}
return obj;
}
/**
* 删除 memcached 中的任何现有值。
*
* @param key 键
* @return
*/
public static boolean delete(String key) {
return deleteExp(key, null);
}
/**
* 删除 memcached 中的任何现有值。
*
* @param key 键
* @param expire 过期时间 New Date(1000*10):十秒后过期
* @return
*/
public static boolean delete(String key, Date expire) {
return deleteExp(key, expire);
}
/**
* 删除 memcached 中的任何现有值。
*
* @param key 键
* @param expire 过期时间 New Date(1000*10):十秒后过期
* @return
*/
private static boolean deleteExp(String key, Date expire) {
boolean flag = false;
try {
flag = cachedClient.delete(key);
} catch (Exception e) {
e.printStackTrace();
logger.error("Memcached delete方法报错,key值:" + key + "\r\n" +
e.getMessage());
}
return flag;
}
/**
* 清理缓存中的所有键/值对
* @return
*/
public static boolean flashAll() {
boolean flag = false;
try {
flag = cachedClient.flushAll();
} catch (Exception e) {
e.printStackTrace();
logger.error("Memcached flashAll方法报错\r\n"+ e.getMessage());
}
return flag;
}
/**
* 返回异常栈信息,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();
}
/*@Test
public void testMemcachedSpring() {
MemcachedUtils.set("aa", "bb", new Date(1000 * 60));
Object obj = MemcachedUtils.get("aa");
System.out.println("***************************");
System.out.println(obj.toString());
}*/
}
使用memached做一个小demo,,根据网上的做了修改,将getBean改为注解方式,并玩了下断言..
@Autowired
MemCachedClient memCachedClient;
@Test
public void test(){
try {
//设置/获取
memCachedClient.set( "wangzha","set/get", 3600);
assertEquals("set/get", memCachedClient.get("wangzha"));
//替换
memCachedClient.replace("relace","wangzha",3600);
assertEquals("relace", memCachedClient.get("wangzha"));
// 移除
memCachedClient.delete("wangzha");
}catch (Exception e){
e.printStackTrace();
System.out.println( e.getMessage());
}
}
}
学习了序列化..
大扫除...
组装架子...
开周会. 周日其他事情比较多.
晚上0.30测试 json页面 .极限就是68,,在网上就90%就太高了
测试home 极限为9线程
测试 所有all.所有学生信息.极限为18线程
明天计划 :
完成使用memcached,并做测试..
遇到的困难:
无法加载memcached.properties配置文件,memcached的连接配置文件池占位符不能成功加载memcached.properties中的配置
参考师兄之后解决方法是手填.
收获:
学习序列化
序列化 : 把对象转换 为二进制数据(如网络传输,存储数据库等),必须实现序列化接口 (java.io.Serializable).
持久化 : 把对象保存 在介质上(如写文件,读文件不是), 没有接口实现,一般指方法调用.
这里我们可以看出,实际上两者存在某种关系,即序列化只是为持久化提供了一个可能的前提而已,注意我这里只是说可能。
持久化其实是一个很宽泛的概念,任何程序将数据存放超过程序生命周期本身的时间长度,都可以称之为持久化,无论是以文件还是数据库的形式。
序列化,即将对象转化为二进制的数据,这个数据可以拿来存在本地硬盘上,也可以通过网络传输等等,Anyway,这仅仅只是Java为实现对象持久化提供的一个可能的前提而已。
由此可以看出,序列化和持久化本身不是一件事情,但是在Java的逻辑里,如若实现对象持久化,序列化则是必要前提。序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。
任务进度:任务6步骤1
任务开始时间:2017-11-4
预计demo时间:2017-11-12
是否有延期风险:暂无
禅道:http://task.ptteng.com/zentao/task-view-13091.html
评论