`
whilew
  • 浏览: 21290 次
文章分类
社区版块
存档分类
最新评论

Ehcache cache 无法进行缓存处理

 
阅读更多
从 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缓存使用

    cache、ehcache等缓存使用,实现存对象读对象等等

    jboss集成 ehcache 快捷部署缓存

    该压缩包用于缓存服务部署,jboss集成ehcache,解压启动即可访问,实现缓存共用

    ehcache模糊批量移除缓存的方法

    本篇文章主要介绍了ehcache模糊批量移除缓存的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Spring 与Ehcache实现基于方法的缓存

    NULL 博文链接:https://liuyunlong1229.iteye.com/blog/2081421

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

    NULL 博文链接:https://llying.iteye.com/blog/492307

    springboot1.x基于spring注解实现J2Cache两级缓存集成

    springboot1.x基于spring注解实现J2Cache两级缓存集成,一级缓存:ehcache,二级缓存:redis,代码可直接运行(根据项目中的README.md提示)

    ehcache 缓存

    有基于ehcache 自己的cache实现,也有是自己实现的,基于ehcache的写磁盘的缓存设置,已经测试过,可以放心使用。

    JAVA编程之spring cache本机缓存应用

    2、Spring Cache利用了AOP,实现了基于注解的缓存功能,并且进行了合理的抽象,业务代码不用关心底层是使用了什么缓存框架,只需要简单地加一个注解,就能实现缓存功能了,做到了对代码侵入性做小。 3、由于市面上的...

    J2Cache 基于内存和 Redis 的两级 Java 缓存框架

    Java 两级缓存框架,可以让应用支持两级缓存框架 ehcache(Caffeine) + redis 。避免完全使用独立缓存系统所带来的网络IO开销问题。J2Cache 是 OSChina 目前正在使用的两级缓存框架(要求至少 Java 8)。第一级缓存...

    Spring AOP+ehCache简单缓存系统解决方案

    需要使用Spring来实现一个Cache简单的解决方案,具体需求如下:使用任意一个现有开源Cache Framework,要求可以Cache系统中Service或则DAO层的get/find等方法返回结果,如果数据更新(使用Create/update/delete方法...

    EHCache缓存

    ehcache是一个用Java实现的使用简单,高速,实现线程安全的缓存管理类库,ehcache提供了用内存,磁盘文件存储,以及分布式存储方式等多种灵活的cache管理方案,是hibernate中默认的CacheProvider。

    Ehcache工具类

    本工具类包括初始化cache 修改缓存容器配置 向指定容器中设置值 取值 删除指定的ehcache容器 删除所有容器 删除容器内所有元素 释放CacheManage 获取所有的cache名称

    ehcache缓存的配置

    ehcache缓存的配置: &lt;cache name="sampleCache" maxElementsInMemory="5" maxElementsOnDisk="100" eternal="false" timeToIdleSeconds="2" timeToLiveSeconds="2" overflowToDisk="true" &gt; &lt;...

    Spring Boot的EhCache缓存使用.docx

    当我们不指定具体其他第三方实现的时候,Spring Boot的Cache模块会使用ConcurrentHashMap来存储。而实际生产使用的时候,因为我们可能需要更多其他特性,往往就会采用其他缓存框架,所以接下来我们会分几篇分别介绍...

    J2Cache两级缓存框架-其他

    J2Cache是OSChina目前正在使用的两级缓存框架(要求至少 Java 8)。第一级缓存使用内存(同时支持 Ehcache 2.x、Ehcache 3.x 和 Caffeine),第二级缓存使用 Redis(推荐)/Memcached。由于大量的缓存读取会导致L2的网络...

    Spring Boot 2.x的EhCache缓存的使用问题详解.docx

    除了按顺序侦测外,我们也可以通过配置属性spring.cache.type来强制指定。我们也可以通过debug调试查看cacheManager对象的实例来判断当前使用了什么缓存。在上一篇中,我们也展示了如何去查看当前使用情况。

    Ehcache使用

    Ehcache使用: CacheManager主要的缓存管理类,一般一个应用为一个实例,如下 CacheManager.create();也可以使用new CacheManager的方式创建 默认的配置文件为ehcache.xml文件,也可以使用不同的配置: ...

    EHCache的使用

    EHCache支持内存和磁盘的缓存,支持LRU、LFU和FIFO多种淘汰算法,支持分布式的Cache,可以作为Hibernate的缓存插件。同时它也能提供基于Filter的Cache,该Filter可以缓存响应的内容并采用Gzip压缩提高响应速度。

    hibernate4.0使用二级缓存jar包

    ehcache 二级缓存 配置使用的jar包 配置如下: &lt;!-- 启用二级缓存 --&gt; &lt;property name="hibernate.cache.use_second_level_cache"&gt;true &lt;!-- 查询的二级缓存配置 --&gt; &lt;property name="hibernate....

    mybatis-ehcache-1.0.0.jar下载

    缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该Session中的所有 Cache 就将清空。2. 二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap存储,不同在于其存储作用域为 Mapper...

Global site tag (gtag.js) - Google Analytics