从 Spring 1.1.1 开始,
EHCache就作为一种通用缓存解决方案集成进 Spring。在一次实际使用EhCache作为缓存数据层缓存过程中,碰到了EhCache对象无法将Element保存到缓存中的问题,最终导致 HItCount总是为零,从而意味着缓存根本就没有起作用,无法达到预期效果,具体配置环境如下:
1.Spring使用3.0.5版本,其中对Ehcache的集成配置信息如下所示:
<!-- 引用ehCache的配置 -->
<bean id="defaultCacheManager"
class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:ehcache.xml" />
</bean>
<!-- 定义ehCache的工厂,并设置所使用的Cache name -->
<bean id="ehCache" class="org.springframework.cache.ehcache.EhCacheFactoryBean">
<property name="cacheManager">
<ref local="defaultCacheManager" />
</property>
<property name="cacheName" value="departCache" />
</bean>
2.ehcache.xml的配置情况如下所示 :
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
updateCheck="false">
<!—设置缓存文件 .data 的创建路径。
如果该路径是 Java 系统参数,当前虚拟机会重新赋值。
下面的参数这样解释:
user.home – 用户主目录
user.dir – 用户当前工作目录
java.io.tmpdir – 默认临时文件路径 -->
<diskStore path="java.io.tmpdir" />
<defaultCache eternal="false" maxElementsInMemory="1000"
overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="0"
timeToLiveSeconds="600" memoryStoreEvictionPolicy="LRU" />
<!—缺省缓存配置。CacheManager 会把这些配置应用到程序中。
下列属性是 defaultCache 必须的:
maxInMemory - 设定内存中创建对象的最大值。
eternal - 设置元素(译注:内存中对象)是否永久驻留。如果是,将忽略超
时限制且元素永不消亡。
timeToIdleSeconds - 设置某个元素消亡前的停顿时间。
也就是在一个元素消亡之前,两次访问时间的最大时间间隔值。
这只能在元素不是永久驻留时有效(译注:如果对象永恒不灭,则
设置该属性也无用)。
如果该值是 0 就意味着元素可以停顿无穷长的时间。
timeToLiveSeconds - 为元素设置消亡前的生存时间。
也就是一个元素从构建到消亡的最大时间间隔值。
这只能在元素不是永久驻留时有效。
overflowToDisk - 设置当内存中缓存达到 maxInMemory 限制时元素是否可写到磁盘
上。
-->
<cache name="departCache" eternal="false" maxElementsInMemory="1000"
maxElementsOnDisk="1000" overflowToDisk="true" diskPersistent="false" timeToIdleSeconds="1440"
timeToLiveSeconds="2880" memoryStoreEvictionPolicy="FIFO" />
</ehcache>
3.在代码中采用手动去计算缓存key的方式来进行缓存,具体使用如下:
private List<AnalysisVO> execute(String sql) throws DaoException {
try {
String key=SystemUtil.encrypt(sql.toUpperCase());//md5值
Object obj = cache.get(key);
if (obj != null) {
return (List<AnalysisVO>) obj;
}
List<AnalysisVO> list = mapper.getAnalysisByYear(sql);
if (list != null)
cache.put(new Element(key, list));
cache.flush();
return list;
} catch (Exception k) {
return null;
}
}
4.问题
在使用过程中始终无法将Element对象写入到cache,从而导致缓存的命中率为0,无法让缓存达到初始目的,经过一段时间排查,最终发现是采用ehcache1.6版本的包在spring3.0.5版本下面存在一定的问秒,通过将依赖包更换为ehcache1.4.2,问题得到解决。
分享到:
相关推荐
本文将详细讲解"cache/ehcache缓存使用"的相关知识点,包括缓存的基本概念、Ehcache的介绍、以及如何在Java应用中使用Ehcache进行缓存操作。 首先,我们要理解什么是缓存。缓存是一种存储技术,它临时存储常用或...
在"Hibernate + EhCache 实现数据缓存的处理"这个主题中,我们将探讨如何利用这两者来优化数据访问。首先,EhCache提供了两级缓存架构,包括内存缓存和磁盘缓存,允许快速访问最近或最常使用的数据,从而显著提升...
使用`TestCache`类进行测试,确保缓存逻辑正确工作。同时,可以使用Ehcache提供的管理工具或监控界面,实时查看缓存的状态,包括命中率、大小、过期等信息。 总结来说,通过Spring与Ehcache的集成,我们可以轻松地...
4. **获取和操作缓存**:使用`Cache`对象进行数据的存取,如`cache.put(key, value)`和`cache.get(key)`。 5. **监控和优化**:Ehcache提供了一些监控工具,帮助开发者分析缓存的使用情况并进行优化。 五、实战...
### 配置EhCache二级缓存 #### 一、简介 EhCache是一个高性能、易于使用的开源缓存系统,最初由 Terracotta 组织开发。它支持多种缓存模型,包括本地缓存和分布式缓存。由于其简单易用且功能强大,EhCache 成为了 ...
将Redis作为二级缓存,可以处理Ehcache无法容纳或者需要跨服务器共享的数据。 在Spring中集成Ehcache和Redis,我们需要做以下工作: 1. **配置Ehcache**: 首先,我们需要在项目中添加Ehcache的依赖,并创建一个...
- **Cache**: 缓存是Ehcache的基本单元,它存储键值对。每个Cache都有自己的配置,如最大元素数、过期策略等。 - **Element**: Cache中的每个条目被称为Element,包含一个Key和对应的Value。 - **Cache Manager**: ...
**Ehcache缓存** Ehcache是一种广泛使用的开源Java分布式缓存系统,它为高性能应用程序提供了内存存储和缓存解决方案。在Java世界中,尤其是在持久化框架如Hibernate的使用中,Ehcache扮演了至关重要的角色。由于...
Ehcache是一个流行的Java缓存库,它被广泛用于缓存数据以减少数据库访问,从而提高应用程序的响应速度。本文将深入探讨如何配置Ehcache作为拦截器来缓存页面,以此提升Web应用的性能。 首先,我们需要了解Ehcache的...
Ehcache 模糊批量移除缓存的方法 Ehcache 是一个流行的 Java 开源缓存框架,配置简单、结构清晰、功能强大。通过注解 @Cacheable 可以快速添加方法结果到缓存。通过 @CacheEvict 可以快速清除掉指定的缓存。但是,@...
4. **缓存分区和复制**:在分布式环境中,Ehcache可以进行缓存分区,提高并发性能,同时支持数据复制,保证数据的一致性。 5. **缓存预热**:启动时预先加载一部分数据到缓存中,提升应用启动速度。 **二、高并发下...
### Ehcache 整合Spring 使用页面、对象缓存 #### 一、Ehcache简介与特点 Ehcache是一款开源的、高性能的Java缓存框架,它可以用来存储、检索短期数据,以减轻数据库的压力,提高应用程序性能。Ehcache不仅支持...
Ehcache 是一个广泛使用的开源 Java 缓存框架,它在处理大量数据的高性能应用中扮演着重要角色。Ehcache 提供了本地内存缓存、磁盘存储以及分布式缓存的能力,使得应用程序能够快速访问频繁使用的数据,从而提高整体...
例如,你可以设置缓存的默认大小,超过此大小时如何处理,以及缓存元素的存活时间和过期时间。 3. **部署ehcache插件**:jboss可能需要特定的插件或模块来与ehcache进行交互。根据jboss版本的不同,可能需要将...
Ehcache支持多种缓存策略,包括内存和磁盘存储,提供了缓存加载器、缓存扩展、缓存异常处理等高级功能,并且支持REST和SOAP API接口。 #### 二、Spring Boot与Ehcache集成 在Spring Boot项目中集成Ehcache可以显著...
3. **缓存操作**:Mybatis-ehcache如何进行缓存的读取、写入和更新操作。在执行SQL后,是如何将结果存入Ehcache的,以及在后续的查询中,如何检查Ehcache并返回缓存的结果。 4. **Key生成策略**:关键在于如何生成...
Ehcache是Hibernate常用的二级缓存解决方案,它可以提高应用程序的性能和响应速度。这篇博客文章“hibernate缓存ehcache用法”可能详细介绍了如何在Hibernate中配置和使用Ehcache。 首先,我们需要理解什么是缓存。...
ehcache 缓存配置详解 Ehcache 是一个流行的 Java 缓存框架,提供了强大的缓存机制,帮助开发者提高应用程序的性能和可扩展性。...这些配置将影响 ehcache 的缓存性能和策略,因此需要根据实际情况进行调整和优化。
<cache type="org.mybatis.cache.EhCacheCache"/> ``` 或者更具体地配置缓存: ```xml <cache eviction="LRU" flushInterval="60000" size="100" readOnly="true"/> ``` 缓存一致性是数据库应用中至关重要的问题...