发表于: 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得尽早投入用


返回列表 返回列表
评论

    分享到