当前位置: 移动技术网 > IT编程>开发语言>Java > spring使用ehcache实现页面缓存示例

spring使用ehcache实现页面缓存示例

2019年07月22日  | 移动技术网IT编程  | 我要评论

夜曲伴奏,钓大鱼汉化版,模版简历

如果将应用的结构分为"page-filter-action-service-dao-db",那page层就是最接近用户的一层,一些特定的页面如果在这里做缓存,之后用户的请求在filter就会结束了,不用再走后面的"action-service-dao-db",很大程度的节省了服务器的压力,也加快了页面响应。

在系统中可以对一些访问量特别大、数据更新较少的页面设置页面缓存,比如首页、一些浏览页和统计页,设置成几分钟更新一次缓存。

spring的ehcache页面缓存是用filter的原理实现的,ehcache-web包中的"simplepagecachingfilter"过滤器提供了简单的页面缓存功能,如果有特殊需要我们也可以继承这个类实现自己的过滤器。

下面举栗子:

 一、添加jar包引用

修改pom.xml文件,加入:

<dependency>
  <groupid>net.sf.ehcache</groupid>
  <artifactid>ehcache-web</artifactid>
  <version>2.0.4</version>
</dependency> 

二、修改配置文件

1、修改web.xml文件,加入两个自己的filter:

<!-- 页面缓存过滤器 -->
<!-- 添加缓存 -->
<filter>
  <filter-name>testpageaddcachingfilter</filter-name>
  <filter-class>org.xs.demo1.testpagecachingfilter</filter-class>
  <init-param>
    <param-name>cachename</param-name>
    <param-value>testpagecache</param-value>
  </init-param>
</filter>

<filter-mapping>
  <filter-name>testpageaddcachingfilter</filter-name>
  <url-pattern>/hello/list</url-pattern>
  <url-pattern>/hello/list2</url-pattern>
  <url-pattern>/hello/view/*</url-pattern>
</filter-mapping>
<!-- 清除缓存 -->
<filter>
  <filter-name>testpageremovecachingfilter</filter-name>
  <filter-class>org.xs.demo1.testpageremovecachingfilter</filter-class>
  <init-param>
    <param-name>cachename</param-name>
    <param-value>testpagecache</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>testpageremovecachingfilter</filter-name>
  <url-pattern>/hello/update/*</url-pattern>
  <url-pattern>/hello/delete/*</url-pattern>
</filter-mapping>

2、修改ehcache-context.xml文件,加入"testpagecache"缓存实例名(一定要加,不然tomcat启动时filter会报错,提示找不到)

<cache name="testpagecache" 

  maxentrieslocalheap="10000"

  maxentrieslocaldisk="100000"

  overflowtodisk="true"

  eternal="false"

  timetoidleseconds="300"

  timetoliveseconds="600"

/>

三、增加filter类

1、增加添加缓存过滤器

package org.xs.demo1;

import net.sf.ehcache.cachemanager;

import net.sf.ehcache.constructs.web.filter.simplepagecachingfilter; 

public class testpagecachingfilter extends simplepagecachingfilter {  

  @override

  protected cachemanager getcachemanager() {

    return ((cachemanager)contextutils.getbean("ehcachemanager"));

  }

} 

继承simplepagecachingfilter类的原因是要自己创建cachemanager,不然会是自动创建,默认会去根目录找"ehcache.xml",和我们已有的配置不符。

2、增加清除缓存过滤器

package org.xs.demo1;

import java.io.ioexception; 

import javax.servlet.filterchain;

import javax.servlet.servletexception;

import javax.servlet.http.httpservletrequest;

import javax.servlet.http.httpservletresponse; 

import net.sf.ehcache.ehcache; 

public class testpageremovecachingfilter extends testpagecachingfilter {   

  @override

  protected void dofilter(final httpservletrequest httprequest, final httpservletresponse httpresponse, final filterchain chain) throws servletexception, ioexception {

    ehcache ehcache = getcachemanager().getehcache(getcachename());

    //清除缓存

    ehcache.removeall();

    //请求继续执行

    chain.dofilter(httprequest, httpresponse);

  }

}

四、运行测试

第一次访问"http://www.lhsxpumps.com/_localhost:8080/demo1/hello/list2"地址,会进入controller中的断点:

第二次访问就不会进入断点了,页面瞬间加载好

点击"删除"按钮,会进入testpageremovecachingfilter过滤器的断点:

之后再访问list2又会重新进入controller中的断点

 

实例代码地址:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网