发表于: 2017-09-28 20:53:52
1 666
今天完成的事情: 今天 成功的应用了缓存 确实很快
因为一般我们不会缓存账号密码 一般是缓存查询的数据
这样能够不必每次都去查询数据库了
所以重新引入了任务四里面的代码 里面有查询数据库的动态页面
public List<T10Two> getAll() {
if (MemcachedUtil.get("users") == null) {
Gson gson= new Gson();
List users = t10TwoMapper.getAll();
String s = gson.toJson(users);
MemcachedUtil.set("users", s);
System.out.println("数据库");
return users;
} else {
System.out.println("缓存");
List users = new Gson().fromJson((String) MemcachedUtil.get("users"), new TypeToken<List<T10Two>>() {
}.getType());
return users;
}
这里涉及到一个序列化与反序列化的问题
开始没有使用序列化反序列化 以至于 缓存一直不起作用
因为我们把数据存在缓存里面需要一种通用格式,比如储存为二进制、xml、json等,把对象转换成这种格式就叫序列化
而反序列化通常是从这种格式转换回来
使用序列化主要是因为跨平台和对象存储的需求,因为网络上只允许字符串或者二进制格式,而文件需要使用二进制流格式,如果想把一个内存中的对象存储下来就必须使用序列化转换为xml(字符串)、json(字符串)或二进制(流)
这里我们是因为接受的是list形式的数据 常用的model层直接implents serializable是不行的
所以这里我们使用了google的gson
首先引入jar包
<!-- Gson序列化工具 -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.1</version>
</dependency>
序列化很简单 new一个gson 然后直接使用他的toJson方法就可以了
反序列化要麻烦一点 首先看前半部分
new Gson().fromJson((String) MemcachedUtil.get("users"),
用了MemcacheUtil工具类get 得到传入的users 然后把他转型为string 作为新new出来的Gson的fromJson方法的传入参数
new TypeToken<List<T10Two>>() {}.getType());
后半句实际上是 新建了一个List《T10Two》的来作为TypeToken的类型 然后指定使用这个类型
然后跑项目之前要看看服务里面 memcache是否打开 进程里有没有
然后根据任务要求 又弄了一个简单的json接口
//新增一个memcache 的json接口
@RequestMapping(value = "/t10json",method = RequestMethod.GET,headers = "Accept=application/json")
public String getAll(HttpServletRequest request,Model model){
List<T10Two> users=t10TwoService.getAll();
model.addAttribute("head",request.getHeader("Accept"));
model.addAttribute("list",users);
return "json";
}
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="json" uri="http://www.atg.com/taglibs/json" %>
<%--<span>${head}</span>--%>
<json:object>
<json:array name="list" var="T10Two" items="${list}">
<json:object>
<json:property name="id" value="${T10Two.id}"/>
<json:property name="name" value="${T10Two.name}"/>
<json:property name="job" value="${T10Two.job}"/>
</json:object>
</json:array>
</json:object>
然后为了使用jmter测试 再把原来没缓存的名字后面加个2 在写上 一起测试
这个是线程数10 循环5 的结果 还是能看出有无缓存的区别的
然后加大 线程数20 循环10
在加大数据量 40 20
整体上看 很明显 有缓存比无缓存快 json比jsp快 终于知道为啥师兄 一直给前端传json了 快啊
然后配置了一下 nginx 负载均衡
看了一下师兄们都是使用一台服务器的 只是同时使用jetty 和resin 分别用不同端口
然后默认轮询 看日志 和原来没有什么大的区别
安装redis 官网上直接说是不支持windows系统了
在网上搜以前的版本可以 然儿大部分不支持32位 我32怎么了
然后找了一个支持32位的 居然打不开提示不是内部外部命令 尴尬
终于找到一个靠谱的教程
http://www.cnblogs.com/herry52/p/5938902.html
这个需要注意的是下载的2.6版本解压之后 还要在bin/release 里面在解压里面的压缩文件
里面有一个
直接运行最下面那个 就可以运行了 或者cmd 切换到这个目录下 执行相关命令
然后去看了进程 已经运行了
cmd 试一下 存取数据
明天计划的事情:配置一下redis 然后整理代码 提交任务六
遇到的问题:缓存一直不能成功调用 后来发现是没有序列化的原因
序列化之后 缓存还是没反应 后来才发现 缓存没开开
系统服务里memcache是自启动的 但是没有启动 手动把它打开 缓存就能用了
jmter测试json接口 一直错误 很奇怪 没搞懂
收获:对数据有了更深的理解
评论