新闻类的网站经常会因为一篇或几篇文章每分钟产生上千的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 缓存的部分还在看 ...
分享到:
相关推荐
ehcache页面缓存技术ehcache页面缓存技术ehcache页面缓存技术ehcache页面缓存技术ehcache页面缓存技术ehcache页面缓存技术ehcache页面缓存技术ehcache页面缓存技术ehcache页面缓存技术ehcache页面缓存技术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作为拦截器来缓存页面,以此提升Web应用的性能。 首先,我们需要了解Ehcache的基本概念。Ehcache是一个开源的、内存级的缓存解决方案,它支持本地缓存和分布式缓存。通过在内存中存储...
本文将深入探讨基于JGROUPS的Ehcache实现的分布式缓存复制,这是一种在Java应用中广泛使用的缓存解决方案。 首先,Ehcache是一个开源的、高性能的Java缓存库,提供本地缓存以及分布式缓存功能。它支持多种缓存策略...
- **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是一个高性能的、基于Java的进程内缓存解决方案,它被广泛应用于各种Java应用程序,包括Java EE和轻量级容器。Ehcache的主要优势在于它的快速响应、易用性和丰富的缓存策略。它提供了两种级别的缓存存储:...
2、由于要实现Ehcache缓存页面,所以必须要添加“ehcache-web-2.0.4.jar” jar包,该jar包主要用于辅助Ehcache实现页面缓存 注意: 本web工程的发布不要使用Tomcat7,否则会出现如下异常: 2015-3-25 9:53:50 org....
Ehcache是由Terracotta公司开发的内存缓存框架,它被广泛应用于各种Java应用程序,包括Web应用、大数据处理、数据库连接池等场景。Ehcache提供了一个简单易用的API,允许开发者轻松地在应用中集成缓存功能,从而减少...
在Web开发中,Ehcache可以用于缓存静态或半静态的页面内容,如首页、分类列表页等。这样,当用户请求这些页面时,服务器可以直接从缓存中获取数据,避免了每次请求都执行昂贵的数据库查询。这极大地提高了响应速度,...
**Ehcache二级缓存配置详解** Ehcache是一个广泛使用的开源Java缓存库,它提供了内存和磁盘存储的缓存解决方案,适用于提高应用程序性能和减少数据库负载。在Java应用中,尤其是在Spring框架中,Ehcache常被用作二...
【Ehcache页面缓存详解】 Ehcache是一款广泛使用的Java缓存库,它能够有效提升应用程序性能,尤其是在处理高访问量的页面时。本文主要探讨如何利用Ehcache实现页面缓存,以及相关的配置和策略。 首先,理解Ehcache...
Hibernate EhCache 二级缓存配置 Hibernate EhCache 二级缓存配置是 Hibernate 框架中的一种缓存机制,它可以提高应用程序的性能和效率。下面是关于 Hibernate EhCache 二级缓存配置的详细知识点: 一、简介 ...
### 配置EhCache二级缓存 #### 一、简介 EhCache是一个高性能、易于使用的开源缓存系统,最初由 Terracotta 组织开发。它支持多种缓存模型,包括本地缓存和分布式缓存。由于其简单易用且功能强大,EhCache 成为了 ...
总结起来,本文介绍了如何结合Hibernate和EhCache实现数据缓存,涉及了Hibernate配置、EhCache配置、实体类缓存注解以及缓存功能的测试。理解并实践这些知识点,有助于开发出更高效、响应更快的Java应用。
在Ehcache的上下文中,POM文件可能是用来引入Ehcache作为项目依赖的配置文件,这样开发者可以在项目中方便地使用Ehcache提供的缓存功能。 3. **开启二级缓存配置**:在实际应用中,需要在配置文件中启用和配置...
当我们谈论“Spring + Ehcache + Redis”两级缓存时,我们实际上是在讨论如何在Java环境中利用Spring框架来集成Ehcache作为本地缓存,并利用Redis作为分布式二级缓存,构建一个高效且可扩展的缓存解决方案。...
总的来说,通过Spring4的Java配置方式整合EhCache,我们可以实现零配置的页面缓存,极大地提高了Web应用的响应速度和用户体验。在实际开发中,根据项目需求,可以进一步细化缓存策略,如使用更复杂的缓存键生成逻辑...
本资源“jbossehcache缓存快捷部署”提供了集成ehcache到jboss服务器的解决方案,使得缓存服务的部署变得快速而简便。 JBoss是一个开源的应用服务器,它基于Java EE规范,为开发和运行企业级应用提供了平台。...