发表于: 2017-05-29 23:01:35
1 1155
今天完成的事情:
学会使用MemcacheUtil工具类
解决昨天的报错以及今天遇到的问题
明天计划的事情:
1)JMeter测试使用Memcache前后的http接口,观察压测数据
2)加上Memcache,在新建数据的时候同时维护好缓存(没有新建数据接口就自己加上,可以分成是压测JSP和Json接口两种方式) ,确定数据没问题,重新压测服务器,测出90%的线在哪里.
3)学会部署两台WEB,使用nginx的upstream来做负载
遇到的问题及收获:
今天在原来项目基础上添加Memcache缓存功能,安装了windows版本的memcached.exe文件到本地电脑,向项目中导入了java-memcache-2.6.6.jar包,新建了一个MemcacheUtil的工具类,同时在service的实现部分加入了缓存机制:
另外,在model中对应的实体类加入实现序列化implements Serializable;
以为一切都已经搞定,于是开始在tomcat上运行,结果报错:
然后我把焦点集中在了memcachedPool这个bean上,
为什么会报错,难道是配置文件没有扫描到吗? 然而,明明在web.xml中已经扫描过了
后来我想是不是缺少依赖包,
果然,在我添加了commons-collections的jar包之后,一切都好了!
点击“前端任务11”的链接,因为是第一次此时数据从数据库中得到,可以看到控制台打印的日志:
再次点击这个链接,访问前端任务11的数据的时候,之前的数据已经存入到memcache中,所以此次访问数据从memcache中查询取出(很明显地感觉到了网页打开的速度快了很多):
还有一个待解决的问题:
前面讲述的访问前端任务11的页面已经没有问题,但是当访问前端任务10的任务时,这个接口是要被拦截器拦截后登陆的,但是莫名奇妙地报了个错:
Property 'position' not found on type com.jason.rest.po.Profession
但是前端任务10使用的实体类应该是Excellent呀,为什么它提醒我说Profession的实体类中没有position,感觉莫名奇妙,于是我猜测可能是Memcache捣的鬼:
带着这个问题,我追溯到了MemcacheUtil.java
我想应该与上面这段有直接关系。
问题剖析:
进入到首页后,我先是点击的“前端任务11的动态页面”,第一次从数据库拿到数据后,第二次再点击就从Memcache缓存中提取。
由于Memcache是以键值对的方式存储数据,之所以position这个本属于Excellent的属性,报错时显示Profession的实体类中没有,是因为,我一开始在ExcellentServiceImpl.java和ProfessionServiceImpl.java中将MemcacheUtil.get(String key)的key同时都设置成了list,所以在点击“前端任务10的动态页面”时会从已经存有数据的缓存中去找,发现缓存中并没有position这个字段呀,就报错了。
现在突然感觉思路好清晰,将两个key改的不同以后,两次访问“前端任务10的动态页面”,控制器显示如下:
浏览器成功跳转到登陆界面:
输入用户名和密码之后,也可以顺利登陆到前端任务10的页面。
评论