7点微信公众号:请点这里。7点测试网QQ总群:277957570。

7点测试网

 找回密码
 注册7点

QQ登录

只需一步,快速开始

查看: 1250|回复: 1

servlet与ehcache实例

[复制链接]
发表于 2014-3-26 15:43:53 | 显示全部楼层 |阅读模式
本帖最后由 cjp110212 于 2014-3-27 11:13 编辑

附件中是在servlet中应用ehcache的实例,只需要修改“Architecture\src\com\xdb\dao\UserDao.java”中的数据库连接信息,即可使用。

备注:应用中没有ehcache及访问数据库相应的jar包,直接放入WEB-INF/lib下即可,ehcache相关jar包可到此处下载

流程如下;访问项目的index.jsp,点击【提交】按钮,会调用servlet,servlet会从数据库中查询出用户信息,显示到前端页面。ehcache的逻辑主要是在service方法中,当服务器收到请时,如果cache中没有该请求的信息,就访问数据库,同时在后台输出“访问了一次数据库”。如果cache中有信息,后台不会打印日志,但前端仍然可以正常返回用户信息。时间长短可在ehcache.xml中配置。

service主要代码片段:
  1. protected void doPost(HttpServletRequest req, HttpServletResponse resp)
  2.                         throws ServletException, IOException {
  3.        
  4.                 CacheManager manager = CacheManager.create();
  5.                 Cache cache = manager.getCache("sample");
  6.                 Element element = cache.get(getClass().getName());
  7.                 if(element == null) {
  8.                         userList = userDao.getUserList();
  9.                         try {
  10.                                 Thread.sleep(3000);
  11.                         } catch (InterruptedException e) {
  12.                                 e.printStackTrace();
  13.                         }
  14.                         System.out.println(userList.size()+"============访问了一次数据库");
  15.                         element = new Element(key,userList);
  16.                         cache.put(element);
  17.                 }
  18.                  element = cache.get(getClass().getName());
  19.                 req.setAttribute("userList", (List<User>)element.getValue());
  20.                 req.getRequestDispatcher("/index.jsp").forward(req, resp);
  21.         }
复制代码



ehcache配置
  1. <?xml version="1.0" encoding="UTF-8"?>
  2.     <ehcache>
  3.      
  4.         <diskStore path="java.io.tmpdir" />
  5.          
  6.         <defaultCache  
  7.             maxElementsInMemory="10000"  
  8.             eternal="false"
  9.             timeToIdleSeconds="120"  
  10.             timeToLiveSeconds="120"  
  11.             overflowToDisk="true"
  12.             diskPersistent="false"  
  13.             diskExpiryThreadIntervalSeconds="120"
  14.             memoryStoreEvictionPolicy="LRU"  
  15.         />
  16.             
  17.         <cache name="sample"         
  18.             maxElementsInMemory="5"   
  19.             maxElementsOnDisk = "5"  
  20.             eternal="false"   
  21.             timeToIdleSeconds="20"   
  22.             diskPersistent="false"  
  23.             timeToLiveSeconds="30"   
  24.             overflowToDisk="false"  
  25.             memoryStoreEvictionPolicy="FIFO"  
  26.             statistics="true"  
  27.         />
  28.      
  29.     </ehcache>
复制代码


备注:需要注意以下事项
          1、真实场景中,肯定不可能每个service都去检查cache中的数据,一般是用filter做拦截,让filter去检测
          2、实例中只做了put操作,真实场景中,如果业务数据发生了变动,如:update,delete,肯定需要从cache中去掉相应的数据
来自群组: 7点性能组

Architecture.zip

778.37 KB, 下载次数: 1, 下载积分: 金钱 -3

您需要登录后才可以回帖 登录 | 注册7点

本版积分规则

QQ|Archiver|手机版|小黑屋|7点测试网 ( 京ICP备09084002号

GMT+8, 2018-11-17 17:03 , Processed in 0.147578 second(s), 24 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表