`
happysoul
  • 浏览: 404170 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

小试 EhCache web 用来缓存JSP页面

    博客分类:
  • JAVA
阅读更多
新闻类的网站经常会因为一篇或几篇文章每分钟产生上千的pv
以前接触到的是OScache来缓存客户端请求的jsp页面,不过当时不知是什么原因作用并不是很明显,检测服务器的log,使用IE访问了某个页面后,同一台电脑改换成FF或谷歌去访问同一个页面的时候缓存并没有生效,而是又到数据库去读取了一次数据才展示给请求用户

无意中在开源网站中看到了个 Ehcache web 便拿来试了下

web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd "
     version="2.5">
  <display-name>EhCache-Web</display-name>
  <filter>
    <filter-name>PageCacheFilter</filter-name>
    	<filter-class>net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter
    </filter-class>
  </filter>
  <filter-mapping>
    <filter-name>PageCacheFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

这里使用了个简单的过滤器来拦截所有的请求

ehcache.xml
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../main/config/ehcache.xsd">
<diskStore path="java.io.tmpdir/ehcache" />
    <cache name="SimplePageCachingFilter"
           maxElementsInMemory="10000"
           maxElementsOnDisk="1000"
           eternal="false"
           overflowToDisk="true"
           timeToIdleSeconds="5"
           timeToLiveSeconds="10"
           memoryStoreEvictionPolicy="LFU"
            />
	<defaultCache
            maxElementsInMemory="10000"
            eternal="false"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            overflowToDisk="true"
            maxElementsOnDisk="10000000"
            diskPersistent="false"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU"
            />
</ehcache>

<diskStore path="java.io.tmpdir/ehcache" />
磁盘存储指向了系统临时文件夹下的ehcache文件夹
为了测试 timeToLiveSeconds 最大存活时间我只用了10秒,剩下的参数参看ehcache的文档

测试前还需要数据库,毕竟这里是为了检测缓存后jsp是否还会去数据库取数据

一个简单的index页面来读取数据库
index.jsp
<%@page import="java.sql.ResultSet"%>
<%@page import="com.db.DB"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>测试</title>
</head>
<body>
<%
	DB db = new DB();
	ResultSet rs = null;
	rs = db.getQuery("select * from user");
	while(rs.next()){
		Integer id = rs.getInt("id");
		String s = rs.getString("name");
		out.print(id+" : "+s+"<br>");
	}
	System.out.println(System.currentTimeMillis());
%>
</body>
</html>


数据库操作类,当然这里我精简了很多,看客对这部分可无视
我连接了test库 用户名密码用的时候怎么改你懂的
DB.java
package com.db;
import java.sql.*;
public class DB{
	private final static String name="root";
	private final static String pwd="";
    protected Connection con;
    private Statement stmt;
    Statement myst;
    public DB(){
        con = null;
        stmt = null;
        myst = null;
        try{
            Class.forName("org.gjt.mm.mysql.Driver").newInstance();
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8", name, pwd);
            stmt = con.createStatement();
        }
        catch(Exception e){
            System.out.println("DatabaseConnect error:" + e.toString());
        }
    }
    public ResultSet getQuery(String queryStr){
        ResultSet result = null;
        try{
            result = stmt.executeQuery(queryStr);
        }catch(Exception ex){
            System.out.println("getQuery error:" + ex.toString());
        }
        return result;
    }
}


ehcache web 的下载地址,jar文件太大就不传了
http://sourceforge.net/projects/ehcache/files/ehcache-web/

我用到的jar
ehcache-core-2.4.4.jar
ehcache-web-2.0.3.jar
slf4j-api-1.5.11.jar
上面的 sourceforge 可下到
log4j.jar
mysql-connector-java-5.1.6-bin.jar
slf4j-log4j12.jar
这个是web启动时候报的缺少的jar 只要你做过SSH的东西这些肯定会有的


测试方法
1.启动了项目去访问index.jsp页面
2.然后迅速修改数据库的记录
3.刷新index.jsp页面

结果
在第一次刷新页面的时候控制台会打出当前时间,不论是否修改数据库数据,再次刷新控制台在10秒内都不会再出现System.out.的信息
同样测试多个浏览器的时候 IE访问了主页后 换用FF去访问的时候没有再次读取数据库数据

更多的关于 ehcache web 缓存的部分还在看 ...
4
7
分享到:
评论
5 楼 Hibernate1 2016-08-10  
ehcache.xml文件中配置的cache定义的name必须为SimplePageCachingFilter才能表现在filter过滤器中吗?
4 楼 Hibernate1 2016-08-10  
技术的进步,在于源源不断的创新,感谢楼主带我入门
3 楼 sz_xiaoqi 2016-02-23  
准备去试试
2 楼 pandong8183 2012-09-18  
看上去是比较强大
1 楼 sqbo 2012-04-01  
http://ehcache.org/documentation/user-guide/web-caching

相关推荐

    ehcache页面缓存技术

    ehcache页面缓存技术ehcache页面缓存技术ehcache页面缓存技术ehcache页面缓存技术ehcache页面缓存技术ehcache页面缓存技术ehcache页面缓存技术ehcache页面缓存技术ehcache页面缓存技术ehcache页面缓存技术ehcache...

    springMVC+Ehcache的各级缓存(包括页面缓存)

    SpringMVC和Ehcache的结合使用,能够构建一个高效、灵活的多级缓存系统,其中包括页面缓存。下面将详细介绍SpringMVC与Ehcache集成后的各级缓存机制以及页面缓存的实现。 1. SpringMVC简介: SpringMVC是Spring框架...

    基于java的开发源码-ehcache(Java缓存框架 EhCache).zip

    基于java的开发源码-ehcache(Java缓存框架 EhCache).zip 基于java的开发源码-ehcache(Java缓存框架 EhCache).zip 基于java的开发源码-ehcache(Java缓存框架 EhCache).zip 基于java的开发源码-ehcache(Java缓存框架 ...

    ehcache配置拦截器缓存页面

    本文将深入探讨如何配置Ehcache作为拦截器来缓存页面,以此提升Web应用的性能。 首先,我们需要了解Ehcache的基本概念。Ehcache是一个开源的、内存级的缓存解决方案,它支持本地缓存和分布式缓存。通过在内存中存储...

    基于JGROUPS的ehcache的分布式缓存复制

    本文将深入探讨基于JGROUPS的Ehcache实现的分布式缓存复制,这是一种在Java应用中广泛使用的缓存解决方案。 首先,Ehcache是一个开源的、高性能的Java缓存库,提供本地缓存以及分布式缓存功能。它支持多种缓存策略...

    Ehcache 整合Spring 使用页面、对象缓存

    - **Web页面缓存库**:ehcache-web-2.0.4-distribution.tar.gz,主要用于页面级别的缓存。 2. **添加JAR包到项目**: - 将ehcache-core-2.5.2.jar和ehcache-web-2.0.4.jar添加到项目的lib目录下。 3. **配置文件...

    Ehcache分布式缓存与其在SpringBoot应用

    Ehcache是一个高性能的、基于Java的进程内缓存解决方案,它被广泛应用于各种Java应用程序,包括Java EE和轻量级容器。Ehcache的主要优势在于它的快速响应、易用性和丰富的缓存策略。它提供了两种级别的缓存存储:...

    借助Ehcache缓存框架实现对页面的缓存Demo

    2、由于要实现Ehcache缓存页面,所以必须要添加“ehcache-web-2.0.4.jar” jar包,该jar包主要用于辅助Ehcache实现页面缓存 注意: 本web工程的发布不要使用Tomcat7,否则会出现如下异常: 2015-3-25 9:53:50 org....

    ehcache项目缓存技术

    Ehcache是由Terracotta公司开发的内存缓存框架,它被广泛应用于各种Java应用程序,包括Web应用、大数据处理、数据库连接池等场景。Ehcache提供了一个简单易用的API,允许开发者轻松地在应用中集成缓存功能,从而减少...

    项目优化之Ehcache页面缓存

    在Web开发中,Ehcache可以用于缓存静态或半静态的页面内容,如首页、分类列表页等。这样,当用户请求这些页面时,服务器可以直接从缓存中获取数据,避免了每次请求都执行昂贵的数据库查询。这极大地提高了响应速度,...

    ehcache二级缓存配置文件

    **Ehcache二级缓存配置详解** Ehcache是一个广泛使用的开源Java缓存库,它提供了内存和磁盘存储的缓存解决方案,适用于提高应用程序性能和减少数据库负载。在Java应用中,尤其是在Spring框架中,Ehcache常被用作二...

    ehcache缓存页面

    【Ehcache页面缓存详解】 Ehcache是一款广泛使用的Java缓存库,它能够有效提升应用程序性能,尤其是在处理高访问量的页面时。本文主要探讨如何利用Ehcache实现页面缓存,以及相关的配置和策略。 首先,理解Ehcache...

    Hibernate EhCache 二级缓存配置.docx

    Hibernate EhCache 二级缓存配置 Hibernate EhCache 二级缓存配置是 Hibernate 框架中的一种缓存机制,它可以提高应用程序的性能和效率。下面是关于 Hibernate EhCache 二级缓存配置的详细知识点: 一、简介 ...

    配置EhCache二级缓存

    ### 配置EhCache二级缓存 #### 一、简介 EhCache是一个高性能、易于使用的开源缓存系统,最初由 Terracotta 组织开发。它支持多种缓存模型,包括本地缓存和分布式缓存。由于其简单易用且功能强大,EhCache 成为了 ...

    Hibernate + EhCache 实现数据缓存的处理

    总结起来,本文介绍了如何结合Hibernate和EhCache实现数据缓存,涉及了Hibernate配置、EhCache配置、实体类缓存注解以及缓存功能的测试。理解并实践这些知识点,有助于开发出更高效、响应更快的Java应用。

    Ehcache二级缓存.zip

    在Ehcache的上下文中,POM文件可能是用来引入Ehcache作为项目依赖的配置文件,这样开发者可以在项目中方便地使用Ehcache提供的缓存功能。 3. **开启二级缓存配置**:在实际应用中,需要在配置文件中启用和配置...

    spring + ehcache + redis两级缓存

    当我们谈论“Spring + Ehcache + Redis”两级缓存时,我们实际上是在讨论如何在Java环境中利用Spring框架来集成Ehcache作为本地缓存,并利用Redis作为分布式二级缓存,构建一个高效且可扩展的缓存解决方案。...

    Spring4 整合EhCache实现 页面缓存 零配置

    总的来说,通过Spring4的Java配置方式整合EhCache,我们可以实现零配置的页面缓存,极大地提高了Web应用的响应速度和用户体验。在实际开发中,根据项目需求,可以进一步细化缓存策略,如使用更复杂的缓存键生成逻辑...

    jboss集成 ehcache 快捷部署缓存

    本资源“jbossehcache缓存快捷部署”提供了集成ehcache到jboss服务器的解决方案,使得缓存服务的部署变得快速而简便。 JBoss是一个开源的应用服务器,它基于Java EE规范,为开发和运行企业级应用提供了平台。...

Global site tag (gtag.js) - Google Analytics