发表于: 2017-11-10 22:50:20
1 752
今天完成的事情
学习Java序列化
Java提供了一种对象序列化的机制,一个对象可以被表示为一个字节序列,该字节序列包括了该对象的属性
将序列化对象写入文件之后,可以从文件中读取出来,如果对其进行反序列化,就可以在内存中重新建立具有相同属性的对象
整个过程都是Java虚拟机独立的, 所以,在一个平台上序列化的对象可以在另一个完全不同的平台上反序列化该对象。
一个类的对象要序列化,需要满足两个条件
该类要实现Serializable接口
该类的所有属性必须是可序列化的
尝试将之前的Student类序列化
先实现Serializable接口
public class Student implements Serializable{
private int ID;
private long create_at;
进行测试
public class Test {
@org.junit.Test
public void testMemcache(){Student s = new Student();
s.setName("hh");
MemcachedUtil.put("test1",s);
Student s2 = (Student)MemcachedUtil.get("test1");
System.out.println(s2.getName());
}
}
先创建一个Student对象,属性name设置为hh, MemcachedUtil.put("test1",s)表示将Student s 作为value加入缓存中,对象在这个过程中会自动序列化,key为test1,然后再用MemcachedUtil.get("test1")从缓存中取出其key为test1的value,在此过程中会进行反序列化,从而获得一个Object对象,再强制类型转换为Student类型
执行结果
尝试在查询的时候加入缓存,先在缓存中查询,如果没有,就再到数据库中去查询,然后将查询到的数据存入缓存中:
public String haha(Model model,HttpServletRequest request){
String id_s = request.getParameter("user_id");
int ID = Integer.parseInt(id_s);
Student student = null;
//在缓存中查询
student = (Student) MemcachedUtil.get(id_s);
//如果没有,则到数据库中查询
if (student == null){
//从数据库取得数据
student = studentService.get(ID);
//如果从数据库中取得数据
if (student != null){
int user_id = student.getID();
//转字符串
String u_id = user_id+"";
//将数据存入缓存
MemcachedUtil.add(u_id,student);
}else
return "notfind";
}
model.addAttribute("user",student);
return "11";
}
基本实现了功能
在jsp中用el表达式获取
${user.toString()}
在页面显示了缓存中的数据:
明天的计划
学习Redis
遇到的问题
无
收获
了解了序列化和反序列化
评论