一、hibernate缓存简介
二、EhCache简介
EHCache 是一个非常轻量级的缓存实现,是一个纯Java的进程内缓存框架,而且从1.2 之后就支持了集群,是Hibernate中默认的CacheProvider。
具有快速、精干等特点,Ehcache可以直接使用。
也可以和Hibernate对象/关系框架结合使用。可以将对象、数据、jsp、Servlet进行缓存。
Cache 存储方式 :内存或磁盘。
三、配置
1、首先到官网下载ehcache-core.jar、ehcache-web.jar最新版本,然后加入所在工程的lib中
2、在hibernate的相关配置中添加如下:
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.cache.use_second_level_cache">true</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
<prop key="hibernate.cache.provider_configuration_file_resource_path">/ehcache.xml</prop>
3、需要在映射文件*.hbm.xml中<class name="" table="" > 节点下添加如下:
<!-- 缓存策略 -->
<cache usage="read-write"/>
4、在src根目录下加入ehcache.xml文件,具体内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<!-- 数据缓存存放目录 -->
<diskStore path="/jcms_cache_data/ehcache"/>
<!--
页面缓存
三种缓存算法:LRU-最近最少使用、LFU-较少频率使用和FIFO-先进先出。
参数详解:
simplePageCachingFilter 缓存的名称
maxElementsInMemory 缓存中元素的最大数量
maxElementsOnDisk 持久化到硬盘的缓存元素的最大数量
eternal="false" 如果为true,表示对象永远不会过期,此时会忽略timeToIdleSeconds和timeToLiveSeconds属性,默认为false;
overflowToDisk="true" 当缓存中元素数量超过限制时,将这些元素持久化到硬盘,为false时,设置没意义。
timeToIdleSeconds 多长时间不访问缓存,那么就清除该缓存
timeToLiveSeconds 缓存的存活时间
-->
<cache name="SimplePageCachingFilter"
maxElementsInMemory="10000"
maxElementsOnDisk="1000"
eternal="false"
overflowToDisk="true"
timeToIdleSeconds="5"
timeToLiveSeconds="30"
memoryStoreEvictionPolicy="LFU"/>
<!-- Ehcache 对象、数据缓存用以下配置 -->
<defaultCache maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
diskSpoolBufferSizeMB="30"
maxElementsOnDisk="10000000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"/>
</ehcache>
5、web.xml中加入以下配置:
<!-- Ehcache页面缓存配置 -->
<filter>
<filter-name>PageCacheFilter</filter-name>
<filter-class>net.cnki.tpi.cms.util.PageCacheFilter</filter-class>
<!-- 初始化参数为无需缓存的URL,多个以逗号分隔 -->
<init-param>
<param-name>notCacheUrlList</param-name>
<param-value>/jcms/pcons/getUserManager.action</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>PageCacheFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
5、写一个Filter,继承SimplePageCachingFilter,如下:
- package net.cnki.tpi.cms.util;
- import java.util.Enumeration;
- import javax.servlet.FilterChain;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import net.sf.ehcache.CacheException;
- import net.sf.ehcache.constructs.blocking.LockTimeoutException;
- import net.sf.ehcache.constructs.web.AlreadyCommittedException;
- import net.sf.ehcache.constructs.web.AlreadyGzippedException;
- import net.sf.ehcache.constructs.web.filter.FilterNonReentrantException;
- import net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter;
- import org.apache.log4j.Logger;
- public class PageCacheFilter extends SimplePageCachingFilter {
- private final static Logger log = Logger.getLogger(PageCacheFilter.class);
- private final static String NOT_CACHE_URL_LIST = "notCacheUrlList";
- private static String[] notCacheURLs;
- private void init() throws CacheException {
- String notCacheUrlList = filterConfig.getInitParameter(NOT_CACHE_URL_LIST);
- if(!MyStringUtil.isNullOrEmpty(notCacheUrlList)){
- notCacheURLs = notCacheUrlList.split(",");
- }
- }
- @Override
- protected void doFilter(final HttpServletRequest request,final HttpServletResponse response, final FilterChain chain)throws AlreadyGzippedException, AlreadyCommittedException,FilterNonReentrantException, LockTimeoutException, Exception
- {
- if (notCacheURLs == null) {
- init();
- }
- String request_url = request.getRequestURI();
- boolean flag = false;
- if (notCacheURLs != null && notCacheURLs.length > 0) {
- for (String notCacheURL : notCacheURLs) {
- if (request_url.contains(notCacheURL.trim())) {
- flag = true;
- break;
- }
- }
- }
- //如果请求的url为不需要缓存的,则执行正常页面转向;否则缓存该页面
- if (flag) {
- chain.doFilter(request, response);
- }else{
- String query = request.getQueryString();
- if (query != null) {
- query = "?" + query;
- }
- log.info("当前请求被缓存:" + request_url + query);
- super.doFilter(request, response, chain);
- }
- }
- @SuppressWarnings("unchecked")
- private boolean headerContains(final HttpServletRequest request, final String header, final String value) {
- logRequestHeaders(request);
- final Enumeration accepted = request.getHeaders(header);
- while (accepted.hasMoreElements()) {
- final String headerValue = (String) accepted.nextElement();
- if (headerValue.indexOf(value) != -1) {
- return true;
- }
- }
- return false;
- }
- @Override
- protected boolean acceptsGzipEncoding(HttpServletRequest request) {
- boolean ie6 = headerContains(request, "User-Agent", "MSIE 6.0");
- boolean ie7 = headerContains(request, "User-Agent", "MSIE 7.0");
- return acceptsEncoding(request, "gzip") || ie6 || ie7;
- }
- }
Refer:http://blog.csdn.net/lpz283929516/article/details/8084664
相关推荐
本文将深入探讨ehcache.xml配置文件中的关键参数及其作用,帮助开发者更有效地管理和优化缓存策略。 ### 1. `defaultCache` 标签 `defaultCache` 是ehcache.xml中一个重要的标签,用于定义所有未显式指定缓存策略...
#### 三、ehcache配置详解 **1. 运行时配置的优点:** - **统一管理**:集中配置所有Cache,方便调整缓存策略和资源分配。 - **动态调整**:发布后可根据实际运行情况调整缓存配置,无需重新编译代码。 **2. 缓存...
ehcache 缓存配置详解 Ehcache 是一个流行的 Java 缓存框架,提供了强大的缓存机制,帮助开发者提高应用程序的性能和可扩展性。 Ehcache 的配置主要包括 diskstore、defaultCache、cache 三个部分,这三个部分的...
**Ehcache 使用详解** Ehcache 是一个广泛使用的开源Java缓存库,它提供了内存和磁盘存储的二级缓存机制,以提高应用程序的性能和响应速度。Ehcache 被设计为轻量级且易于集成到各种Java应用程序中,支持分布式缓存...
**EHCache配置详解** EHCache是一款广泛应用于Java环境中的开源分布式缓存系统,它能够显著提升应用程序的性能和响应速度,特别是在数据访问密集型的应用场景中。本文将深入探讨EHCache的配置细节,帮助开发者更好...
#### 四、ehcache配置详解 - **内存与硬盘缓存**:通过 `maxElementsInMemory` 和 `maxElementsOnDisk` 属性来控制缓存在内存和硬盘上的最大条目数量,这有助于管理缓存资源的使用,避免占用过多内存或磁盘空间。 - ...
#### 配置详解 `ehcache.xml` 文件示例: ```xml <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"> ...
#### 二、ehcache配置详解 根据给定的部分内容中的`ehcache.xml`配置示例,我们可以深入探讨其各项参数的意义及作用: 1. **`defaultCache`**:这是ehcache默认的缓存配置,当没有为特定缓存指定配置时,将使用此...
#### 三、Ehcache配置详解 在使用Ehcache进行页面缓存时,需要对缓存配置文件进行合理的设置,以满足不同场景的需求。下面是一些关键的配置项及其含义: - **`maxElementsInMemory`**:指定缓存在内存中的最大元素...
### Ehcache2缓存区配置详解 #### 一、Ehcache概述 Ehcache,一个备受推崇的开源高速缓存系统,专为提升应用程序性能、减轻数据库负担及简化应用扩展设计。其卓越的稳定性和丰富的特性使其成为Java领域内最受欢迎...
三、EhCache配置文件详解 EhCache的配置主要通过`ehcache.xml`文件进行。以下是一些关键配置元素: 1. `<cache>`元素:定义一个缓存区域,包括缓存名称、最大元素数、内存和磁盘存储策略等。例如: ```xml ...
#### 二、Ehcache配置详解 Ehcache主要通过XML配置文件来进行管理,以下是对XML配置文件中关键参数的详细解析: 1. **`<ehcache>`**:根元素,用于包含所有的缓存定义。 2. **`<diskStore path="java.io.tmpdir"/>...
Hibernate+EhCache 配置及使用说明详解 EhCache 是 Hibernate 的二级缓存技术之一,可以把查询出来的数据存储在内存或者磁盘,节省下次同样查询语句再次查询数据库,大幅减轻数据库压力。 EhCache 的使用注意点: ...
**2.3 ehcache配置文件中元素说明** 在ehcache.xml配置文件中,可以定义多个缓存区域及其配置参数。常见的配置项包括: - `<cache>`:定义一个缓存区域。 - `name`:缓存的名称。 - `maxElementsInMemory`:内存中...
配置ehcache缓存,存储内存的设置,与spring 的整合等
**Ehcache 使用详解与集群配置** Ehcache 是一个广泛使用的开源Java缓存系统,它提供了内存和磁盘存储,以及对缓存数据的分布式处理能力。在Java应用程序中,Ehcache能够显著提高性能,减少数据库负载,通过缓存...
2.3 EHCACHE配置文件中元素说明 配置文件中包含、、、等元素,分别用于定义缓存、默认缓存参数、磁盘存储设置和事务管理器查找。 2.4 在工程中单独使用 通过CacheManager获取或创建Cache实例,然后添加、检索、更新...
### JavaWeb中Ehcache缓存配置详解 在JavaWeb应用开发中,缓存技术扮演着至关重要的角色,它能够显著提升应用性能和响应速度,减少数据库负担。Ehcache作为一款广泛使用的开源缓存解决方案,其高效、灵活的特性受到...