发表于: 2018-04-25 21:41:19
0 603
今天完成的事情:
完善昨天的缓存代码。用fastjson重写了几个json接口,分为加上缓存和不加缓存。
//不带缓存的json接口,模糊查询
@RequestMapping(value = "/student/jsontest2",produces ={"application/json;charset=UTF-8"})
@ResponseBody
public String jsontest2(@RequestParam("name") String name) {
String cjson = "";
List<Student> stu= null;
try {
stu = stuServiceImpl.findUserByName2(name);
} catch (IOException e) {
e.printStackTrace();
}
cjson = JSON.toJSONString(stu);
return cjson;
}//带缓存的json接口,模糊查询。produces ={"application/json;charset=UTF-8"}解决fastjson的中文乱码
@RequestMapping(value = "/student/jsontest3",produces ={"application/json;charset=UTF-8"})
@ResponseBody
public String jsontest3(@RequestParam("name") String name) {
String cjson = "";
List<Student> stu=stuServiceImpl.findUserByName3(name);
cjson = JSON.toJSONString(stu);
return cjson;
}
public List<Student> findUserByName3(String name) {
try {
if(mem.get("findUserByName3"+name)==null) {
mem.set("findUserByName3"+name,3000,studentMapper.findUserByName2(name));
return studentMapper.findUserByName2(name);
}
} catch (TimeoutException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (MemcachedException e) {
e.printStackTrace();
}
try {
return mem.get("findUserByName3"+name);
} catch (TimeoutException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (MemcachedException e) {
e.printStackTrace();
}
// System.out.println(mem.get("findUserById"+ID)+"从缓存中提取数据输出");
return studentMapper.findUserByName2(name);
}
fastjson还有字段名第一个字母大小写的坑:
需要在对应的字段上加上@JSONField(name = "ID"),相当于重命名。
public class Student implements Serializable {
@JSONField(name = "ID")
private Long ID;
private String name;
@JSONField(name = "QQ")
private long QQ;
private String onlineID;
private Long time_of_enrollment;
private String graduate_institutions;
private String report_link;
private String swear;
private String hearfrom;
private Long create_at;
private Long update_at;
public Student() {
}
用jemeter测试:
先关闭服务端的memcached,
然后打开memcached:
可以看到开启memcached之后,吞吐量增大了90%,响应时间明显降低。
但是和没有加缓存的接口相比较:
上面是开启memcached的结果,下面是关闭memcached的结果
可以看到 开启memcached的情况下带缓存的接口和不带缓存的接口相比较:
吞吐量:带缓存的更大。响应时间:带缓存的接口更短。错误率:不相上下。
关闭memcached的情况下带缓存的接口和不带缓存的接口相比较:
吞吐量:不带缓存的更大。响应时间:不带缓存的接口更快。错误率不相上下
开启memcached时测试带缓存的接口和关闭缓存时访问不带缓存的接口进行比较:
吞吐量:后者更大。响应时间:后者快一点;错误率差不多。
响应时间有点长,感觉不正常。明天换一个数据量大的查询试一下。再加上登陆等功能的缓存。
明天计划的事情:
学习redis。
遇到的问题:
压力测试有点惨。数据库的连接池忘了设置连接数量。明天加上。
收获:
压力测试和jemeter的使用,下载了badboy得尽早投入用
评论