发表于: 2017-09-21 23:15:24

2 796


今天完成的任务

1.完成步骤2

我感觉自己经常读不懂老大写的任务步骤是个什么意思/要求。这个步骤2也是看了3天、4天才终于读懂了。


首先确定一下
     步骤2的目标:A.使用缓存 B.分别压测JSP接口、JSON接口 

     步骤2的要求:C.新建数据的同时维护好缓存 D.测出90%的线在哪


先看目标A,很好理解,不解释了
再看目标B,用意应该是比较JSP接口和JSON接口的性能。拿最简单的查询数据来说,如果只是查询单条数据应该不能明显的看出两种接口性能的差距====>通过查列表比较性能
接着要求C,除了要再缓存中加上新的对象,更深的要求应该是新增对象的时同步更新缓存内对象的集合====>读懂这个要求不容易T T

最后要求D,非常好懂,也不解释了。就提一个,90%的线应该低于200ms。


1)先来实现要求C
首先是新增一个对象到缓存的方法:
然后来看一下上图红框选中方法的代码:
通过这两个方法就可以实现要求C。
单元写完了,就要进行单元测试:
单元测试通过,结果如下:

上面的结果我也看不懂是什么东西,那就把这个结果转换一下,新的测试类:
结果:
 
navicat结果:

到这里,就能确保这个单元的功能是没有问题的。


2)写JSP接口、JSON接口
都是做过的东西,不解释了,直接上代码
项目部署到服务器,用浏览器分别测一下这两个接口:

3)准备工作做好了那就开始压测吧
A.有缓存
并发数为10,启动时间1s,循环次数30。此时JSP接口的90%Line略超过200ms,而JSON接口的90%Line才40ms。
并发数为18,启动时间1s,循环次数30。可以看到JSON接口的90%/95%/99%Line全都比JSP接口的小

综上,在有缓存的情况下,JSON接口的性能优于JSP接口,JSP并发数10,JSON并发数18。再来看看没有缓存的情况。


B.无缓存

把缓存关掉后,JSP接口和JSON接口都不能用了报错500,缓存无可用连接。这个不科学!!


遇到的问题

1.未解决——把缓存关掉后,JSP接口和JSON接口都不能用了报错500,缓存无可用连接。


2.已解决——插入的数据如果没指定Id的话,用BookServiceImpl存到缓存里的数据id恒为0。只有指定ID后,才能把正确的数据存到缓存内。
A.先插入数据
测试结果

B.查询数据
查询结果:
对上面的思考, 首先把BookServiceImpl存数据的流程梳理一下,尽量详细:
初始化要新增的数据(指定书名、页数/指定id、书名、页数)====>①存入数据库====>两种初始化方法都可以,存到数据库的数据是正确的
                                                                                         ====>②对象序列化,得到二进制数组====>在缓存中存入二进制数组====>只指定书名、页数的对象,存到缓存的数据id总是为0
                                                                                                                                                                                                   ====>指定id、书名、页数的对象,存到缓存的数据是正确的

好了,在把上面的流程写出来的时候,脑子里已经有解决办法了。在进行对象序列化之前,应该序列化的是数据库里面的对象(有id、书名、页数),而不是方法参数里的对象(只有书名、页数)。更直白的说,就是先往数据库添加对象A(书名+页数),再从数据库取出对象A(此时还多了一个id属性)赋值给对象B,把对象B序列化然后存到memcached里。


收获
1.我发现在自学的过程中很多问题都是依靠自己解决的,因为只有自己清楚自己做过什么事。像上面那样,最开始我只是打算把问题直接写出来,把自己的想法写出来(方便我写日志的),没想到过程梳理到最后,我自己就想到问题发生在什么地方,也有了解决的方案。解决问题的关键是能不能把自己做过的事尽可能详细的梳理出来。那怎样才能梳理出来呢?动手写,而不是在脑子里空想、在脑子里模拟解决办法。
2.越来越喜欢单元测试了,可以确保修改后的代码能够正常工作,以后把一个个单元组合起来,可以非常快速的定位问题

3.在代码里加system.out.print(),帮助理解代码的运行过程。以后可以在相同位置换成由日志来输出信息,debug、info级别输出到控制台,error输出到日志文件里。


明天的计划

1.配置负载均衡

2.配置Redis


进度

步骤3
任务开始时间 2017.9.17
预计提交时间 2017.9.23





返回列表 返回列表
评论

    分享到