1.加入Ehcache的maven引用
<!-- 缓存 -->
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>2.10.0</version>
</dependency>
<dependency>
<groupId>net.sf.ezmorph</groupId>
<artifactId>ezmorph</artifactId>
<version>1.0.6</version>
</dependency>
2.配置ehcache-base.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd"
updateCheck="false" monitoring="autodetect">
<diskStore path="java.io.tmp"/>
<cacheManagerPeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"/>
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
diskSpoolBufferSizeMB="30"
maxElementsOnDisk="10000000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"
/>
<cache name="SystemCache"
maxElementsInMemory="100000"
maxElementsOnDisk="1000"
eternal="false"
overflowToDisk="false"
diskSpoolBufferSizeMB="20"
timeToIdleSeconds="3600"
timeToLiveSeconds="3600"
memoryStoreEvictionPolicy="LFU">
</cache>
</ehcache>
3.创建工具类
package org.chris.framework.utils.cache;
import java.net.URL;
import org.chris.framework.utils.Assert;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
/**
* [单例的Ehcache缓存工具类]
*
* @author Chris li
* @version [版本, 2017-04-12]
* @see
*/
public class EhcacheUtil {
private static final String PATH = "/ehcache-base.xml";
private static final String DEFAULT_CACHE_NAME = "SystemCache";
private static URL url;
private volatile static CacheManager manager;
/**
* [获取缓存管理类实例,双重锁确保缓存管理类单例]
*
* @author Chris li
* @version [版本, 2017-04-12]
*/
private static CacheManager getCacheManagerInstance() {
if (manager == null) {
synchronized (EhcacheUtil.class) {
if (manager == null) {
url = EhcacheUtil.class.getResource(PATH);
manager = CacheManager.create(url);
}
}
}
return manager;
}
/**
* [通过缓存名{cacheName}获取缓存对象]
*
* @author Chris li
* @version [版本, 2017-04-12]
*/
private static Cache getCache(String cacheName) {
Assert.notBlank(cacheName, "缓存名非法!");
Cache cache = getCacheManagerInstance().getCache(cacheName);
Assert.notNull(cache, "未找到对应的缓存对象[" + cacheName + "]!");
return cache;
}
/**
* [将{key:value}存到默认缓存[DefaultCache]中]
*
* @author Chris li
* @version [版本, 2017-04-12]
*/
public static void put(String key, Object value) {
put(DEFAULT_CACHE_NAME, key, value);
}
/**
* [将{key:value}存到默认缓存[DefaultCache]中,存活时间和钝化时间都为{timeToLiveSeconds}秒]
*
* @author Chris li
* @version [版本, 2017-04-12]
*/
public static void put(String key, Object value, int timeToLiveSeconds) {
put(DEFAULT_CACHE_NAME, key, value, timeToLiveSeconds);
}
/**
* [将{key:value}存到默认缓存[DefaultCache]中,存活时间{timeToLiveSeconds}秒,钝化时间{
* timeToIdleSeconds}秒]
*
* @author Chris li
* @version [版本, 2017-04-12]
*/
public static void put(String key, Object value, int timeToLiveSeconds, int timeToIdleSeconds) {
put(DEFAULT_CACHE_NAME, key, value, timeToLiveSeconds, timeToIdleSeconds);
}
/**
* [将{key:value}存到缓存{cacheName}中]
*
* @author Chris li
* @version [版本, 2017-04-12]
*/
public static void put(String cacheName, String key, Object value) {
Assert.notBlank(key, "缓存Key非法!");
synchronized (key.intern()) {
Cache cache = getCache(cacheName);
Element element = new Element(key, value);
cache.put(element);
}
}
/**
* [将{key:value}存到缓存{cacheName}中,存活时间和钝化时间都为{timeToLiveSeconds}秒]
*
* @author Chris li
* @version [版本, 2017-04-12]
*/
public static void put(String cacheName, String key, Object value, int timeToLiveSeconds) {
put(cacheName, key, value, timeToLiveSeconds, timeToLiveSeconds);
}
/**
* [将{key:value}存到缓存{cacheName}中,存活时间{timeToLiveSeconds}秒,钝化时间{
* timeToIdleSeconds}秒]
*
* @author Chris li
* @version [版本, 2017-04-12]
*/
public static void put(String cacheName, String key, Object value, int timeToLiveSeconds, int timeToIdleSeconds) {
Assert.notBlank(key, "缓存Key非法!");
synchronized (key.intern()) {
Cache cache = getCache(cacheName);
Element element = new Element(key, value);
element.setEternal(false);
element.setTimeToLive(timeToLiveSeconds);
element.setTimeToIdle(timeToIdleSeconds);
cache.put(element);
}
}
/**
* [从默认缓存[DefaultCache]中获取{key}对应的值]
*
* @author Chris li
* @version [版本, 2017-04-12]
*/
public static Object get(String key) {
return get(DEFAULT_CACHE_NAME, key);
}
/**
* [从缓存{cacheName}中获取{key}对应的值]
*
* @author Chris li
* @version [版本, 2017-04-12]
*/
public static Object get(String cacheName, String key) {
Assert.notBlank(key, "缓存Key非法!");
synchronized (key.intern()) {
Cache cache = getCache(cacheName);
Element element = cache.get(key);
return element == null ? null : element.getObjectValue();
}
}
/**
* [从默认缓存[DefaultCache]中移除{key}的缓存记录]
*
* @author Chris li
* @version [版本, 2017-04-12]
*/
public static void remove(String key) {
remove(DEFAULT_CACHE_NAME, key);
}
/**
* [从缓存{cacheName}中移除{key}的缓存记录]
*
* @author Chris li
* @version [版本, 2017-04-12]
*/
public static synchronized void remove(String cacheName, String key) {
Assert.notBlank(key, "缓存Key非法!");
getCache(cacheName).remove(key);
}
}
分享到:
相关推荐
本工具类包括初始化cache 修改缓存容器配置 向指定容器中设置值 取值 删除指定的ehcache容器 删除所有容器 删除容器内所有元素 释放CacheManage 获取所有的cache名称
本项目为基于org.hibernate-ehcache框架设计的Ehcache缓存查询工具源码,总计包含35个文件,涵盖6个XML配置文件、6个Java源文件、6个类文件、4个IDE偏好设置文件、3个Markdown文档、2个Excel表格、2个Manifest文件...
同时,可以使用Ehcache提供的管理工具或监控界面,实时查看缓存的状态,包括命中率、大小、过期等信息。 总结来说,通过Spring与Ehcache的集成,我们可以轻松地实现基于方法的缓存,提升应用程序性能。这种机制不仅...
Ehcache 是一款广泛应用于Java开发中...Ehcache作为Java缓存解决方案的重要一环,其灵活性和易用性使其成为许多开发者首选的缓存工具。理解并掌握Ehcache的配置和使用,对于提升Java应用的性能和用户体验具有显著效果。
总的来说,Ehcache是一个强大的工具,能够帮助提升Java应用的性能,通过合理配置和使用,可以有效地管理缓存,避免频繁的数据库交互,从而提高系统响应速度。记住,优化缓存的关键在于理解业务需求和数据访问模式,...
**标题解析:** "ehcache缓存页面.doc" 这个标题表明了文档内容主要关于Ehcache,一个广泛使用的Java缓存库,用于提高应用程序性能。它可能详细介绍了Ehcache如何被用来缓存页面内容,以减少数据库查询和提升响应...
在本篇《Mybatis入门实例(二)——添加ehcache缓存支持》中,我们将深入探讨如何在Mybatis框架中集成Ehcache作为二级缓存,以提高数据访问的效率和性能。Ehcache是一个开源的Java分布式缓存,广泛用于缓存应用程序中...
1. `ehcache-1.6.2.jar`: 这是EhCache的主库文件,包含了所有必要的类和方法,开发者可以通过导入这个JAR文件到项目中来使用EhCache的功能。1.6.2是该版本的编号,表示这是EhCache的一个特定版本。 2. `ehcache-...
- **缓存管理**: Ehcache 提供了 CacheManager 类来管理缓存实例。可以通过 CacheManager 创建、获取和关闭缓存。 - **缓存操作**: 使用 Cache 对象进行添加、更新、获取和删除元素的操作。例如,`cache.put(key, ...
在进行Ehcache缓存开发时,首先需要搭建环境,包括导入ehcache的jar包、依赖的slf4j、ehcache配置文件以及log4j的配置文件。配置文件一般默认放置在classpath根目录下。 开发第一个缓存程序的步骤包括创建...
总结来说,这篇博客可能涵盖了如何在Hibernate项目中集成Ehcache,包括添加依赖、配置缓存策略、实体类缓存注解等步骤。了解和正确使用Hibernate与Ehcache的缓存机制,能够显著提升Java应用的性能,减少数据库压力,...
最后,为了使MyBatis能够使用Ehcache缓存,我们需要在Mapper接口或者DAO类中添加注解`@CacheNamespace`,并指定对应的缓存配置。 在实际开发中,我们还需要关注缓存的一致性问题。因为缓存的存在可能导致数据的不...
《ehcache缓存方法返回结果(一)-MethodCacheInterceptor》 在软件开发中,缓存是一种优化性能的重要手段,尤其是在高并发、大数据量的场景下。本文将深入探讨 Ehcache,一个流行的Java缓存库,以及如何通过...
Ehcache作为Java缓存框架,其简单易用的特性使其成为开发人员优化系统性能的首选工具。通过理解Ehcache的核心概念、配置方式以及使用方法,开发者可以有效地利用缓存提升应用性能,减轻数据库压力,从而提升用户体验...
总之,这个压缩包中的内容涵盖了使用Ehcache作为二级缓存的整个流程,从添加依赖、配置缓存到实际应用和性能调优,对理解和实践Ehcache缓存机制有着重要的参考价值。如果你在使用过程中遇到问题,可以参照提供的文档...
首先,需要在Hibernate的配置文件中启用二级缓存并指定Ehcache为提供者,然后在实体类或映射文件中启用缓存。 ```xml <!-- hibernate.cfg.xml --> <property name="hibernate.cache.use_second_level_cache">true ...
- 使用Ehcache提供的管理工具或第三方监控工具,实时查看和管理缓存状态。 总之,SpringMVC结合Ehcache能够实现多级缓存,有效提高Web应用的响应速度,降低服务器负载。页面缓存是其中一种重要的优化手段,能够...
**Ehcache缓存技术详解** Ehcache是一款开源、基于Java的缓存解决方案,它在内存中存储数据,以提高应用程序的性能和响应速度。Ehcache的主要目标是为那些需要频繁读取数据但又不希望每次都进行数据库查询的应用...
9. **性能监控**:Ehcache提供了监控工具和指标,可以帮助开发者分析和优化缓存性能。 10. **缓存持久化**:当内存缓存满时,Ehcache可以将超出容量的数据写入持久化存储,确保数据不会丢失。 在使用"ehcache.zip...
总结起来,本文介绍了如何结合Hibernate和EhCache实现数据缓存,涉及了Hibernate配置、EhCache配置、实体类缓存注解以及缓存功能的测试。理解并实践这些知识点,有助于开发出更高效、响应更快的Java应用。