`
wangxuliangboy
  • 浏览: 210704 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Ehcache怎样在Element级上控制过期时间

阅读更多

CacheManager ehCacheManager = new CacheManager();
ehCacheManager.addCache("default");
Ehcache cache = ehCacheManager.getCache("default");
Element e = new Element("aa", "aa", false, 1, 1);
cache.put(e);
System.out.println(cache.get("aa"));

Thread.sleep(1050);

System.out.println(cache.get("aa"));//如果这个时候,期待cache是否过期。但是实际的情况是。ehcache依然能获取到相关数据.

 

当你去调用ehcache.put动作时,会调用applyDefaultsToElementWithoutLifespanSet(element);

方法内容:

 if (!element.isLifespanSet()) {
            //Setting with Cache defaults
            element.setTimeToLive((int) configuration.getTimeToLiveSeconds());
            element.setTimeToIdle((int) configuration.getTimeToIdleSeconds());
            element.setEternal(configuration.isEternal());
        }

 

 

Element里面有一个isLifespan的参数,默认是为false的。。
false的时候.Ehcache会element的过期时间设置为默认配置的


当你通过new  Element(Object key, Object value,
                   boolean eternal, int timeToIdleSeconds, int timeToLiveSeconds)

去实例化的时候。。根本不会去设置isLifespan这个参数,而是采用默认的过期策略的。。


但是去调用element 的。setTimeToLive,setTimeToIdle,setEternal方法时,

确会去设置这个参数。。


Element.setEternal(boolean eternal) {
        this.eternal = eternal;
        lifespanSet = true;
    }

这样的话。。就会去单独去设置Element控制过期时间,而不会用默认的配置去覆盖设置.

 

 

个人觉得这个ehcache存在的一个BUG。。

既然在调用element 的。setTimeToLive,setTimeToIdle,setEternal方法时,会去设置这个参数,那么如果在构造的时候也应该调用这些方法。

但是有可能ehcache希望用户能根据不同cache config去配置应用。而不应该应用到element级别上

 

 

分享到:
评论
1 楼 ZetaGundam 2011-03-29  
请教一下,LZ的这个测试是在ehcache的什么版本上进行的?
我这边正好遇到一个类似的问题。
对new element()的时候把TTI和TTL都给初始化成0了,eternal初始化为false,并放入缓存中
cache本身的初始化为eCM.createCache("xxxxx", 100000, false, false, 100, 100,re);
然后我自己完成了listener捕获element过期,但是从来没有打出过我期待看到的element过期信息,但是其他的element过期信息我能够正常接收,请问LZ测试的这个BUG是随机发生还是必发生?

相关推荐

    ehcache二级缓存配置文件

    在Java应用中,尤其是在Spring框架中,Ehcache常被用作二级缓存,以提升数据访问速度。下面我们将深入探讨Ehcache的二级缓存配置及其核心概念。 **1. Ehcache的核心组件** - **Cache**: 缓存是Ehcache的基本单元,...

    ehcache

    在 Hibernate 中,Ehcache 可以作为二级缓存提供服务,将查询结果存储在缓存中,避免重复查询数据库。只需在 Hibernate 配置文件中指定 Ehcache 作为二级缓存提供者即可。 ## 5. Ehcache 的分布式缓存 Ehcache ...

    EhCache缓存

    2. **Element**: Cache中的一个条目,包含键(Key)和值(Value),还可以附加其他信息如创建时间、过期时间等。 3. **Region**: 类似于分区的概念,是EhCache中的一类Cache,方便管理多个相关的缓存。 4. **...

    Ehcache_Hello

    Ehcache最初由Tomi Tirro设计,现在是Terracotta公司的产品,是Java世界中常用的二级缓存解决方案,尤其在Spring框架中得到了广泛应用。 **Ehcache工作原理** Ehcache的核心概念包括缓存、缓存区(Cache)、缓存项...

    EHcache相关jar下载及案例

    在MyBatis中,可以通过插件机制实现EHcache的集成,配置插件并在Mapper接口上使用注解来启用缓存。 总之,EHcache是一个强大且灵活的缓存解决方案,适用于各种Java应用程序。正确地集成和配置EHcache,能够显著提升...

    Ehcache经典中文教程

    Ehcache 是一款广泛使用的 Java 缓存框架,它的核心功能是提高应用程序的性能和响应速度,通过将频繁访问的数据存储在内存中,避免了反复从数据库或其他慢速存储介质中读取数据。本教程将深入讲解 Ehcache 的基本...

    ehcache-1.2.2.jar

    5. **过期策略**:Ehcache提供了多种过期策略,如时间过期、访问过期等,以控制缓存项的生命周期。 **ehcache-1.2.2.jar.license.txt** 这个文件很可能是Ehcache 1.2.2版的许可协议,详细规定了用户可以如何使用、...

    cache/ehcache缓存使用

    此外,Ehcache还支持二级缓存,当一级缓存满时,数据会自动存入二级缓存(如硬盘)。 总结来说,Ehcache是一个强大的Java缓存解决方案,它简化了缓存的管理和使用。通过合理的配置和使用,我们可以显著提高应用程序...

    ehcache缓存

    4. **缓存过期**:Ehcache支持基于时间、基于访问次数或无限制的过期策略,以控制元素的生命周期。 5. **缓存预热**:启动时加载常用数据到缓存,以提高初次使用时的响应速度。 6. **分布式缓存**:Ehcache通过...

    ehcache 缓存

    Ehcache是一款开源、高性能、轻量级的Java缓存框架,广泛应用于各种Java应用程序中,以提高数据访问速度并降低数据库负载。它的核心特性包括内存缓存、磁盘存储和分布式缓存,使得在大数据量下也能保持高效的性能。 ...

    ehcache-1.2.3.jar 下载

    - **元素(Element)**:在Ehcache中,数据以键值对的形式存在,称为缓存元素。 - **缓存区域(Cache)**:多个相关的元素可以组织在一起,形成一个逻辑上的缓存区域。 2. **Ehcache-1.2.3的功能特性** - **内存和...

    Spring+Ehcache集成

    这段配置定义了一个名为`myCache`的缓存,设置了最大本地堆大小、非永久性(会过期)以及过期时间。 然后,在Spring的主配置文件中,如`applicationContext.xml`,我们需要导入Ehcache的配置,并声明一个...

    ehcache 测试demo

    Ehcache支持两种过期策略:Time To Idle(TTI,空闲时间)和Time To Live(TTL,生存时间)。当缓存项超过设定的空闲时间或生存时间,将自动清除。此外,可以通过监听器或者手动调用`remove`方法来清理特定的缓存项...

    ehcache-core-2.6.2-distribution.tar

    - 超时机制:可以设置缓存项的存活时间和过期时间,以控制缓存的生命周期。 - 可扩展性:允许通过插件进行扩展,如添加缓存同步策略、缓存预热等。 - 高可用性:支持备份和故障转移,确保服务不间断。 3. ...

    ehcache jar包 源码

    每个Element都有一个唯一的键和对应的值,还有过期时间和状态信息。 4. **缓存策略**:Ehcache支持多种缓存策略,包括LRU(最近最少使用)、LFU(最不经常使用)和FIFO(先进先出)。这些策略用于决定当缓存达到其...

    EHCache API的基本用法

    例如,在示例中提供的配置文件中定义了一个名为 `WlanCache` 的缓存,其中设置了缓存在内存中的最大元素数量、是否永久有效、空闲时间以及过期时间等属性。 ```xml <ehcache name="WlanCache"> </ehcache> ``` ...

    ehcache使用,以及集群配置

    2. **配置Ehcache**: 在项目中创建`ehcache.xml`配置文件,定义缓存的属性,如缓存的大小、存活时间和过期时间。例如: ```xml maxEntriesLocalHeap="10000" eternal="false" timeToIdleSeconds="120" ...

    java源码:ehcache(Java缓存框架 EhCache).rar

    - **缓存雪崩**:大量缓存同时过期,导致短时间内所有请求都落到数据库上,EhCache可以通过设置合理的过期时间和分布锁避免。 7. **缓存更新与同步**: - **监听器**:EhCache支持缓存事件监听,如添加、更新、...

    ehcache-clustered-3.8.1-kit.zip

    - **缓存策略**:Ehcache支持多种缓存策略,如LRU(最近最少使用)、LFU(最不经常使用)和时间过期,可以根据需求选择合适的策略。 - **缓存监听器**:可以通过注册缓存监听器来监控缓存事件,如添加、更新或移除...

    初学ehcache,3分钟搞定。

    如果设置为`true`,则不会因为过期时间而被移除,这里设置为`false`。 - `timeToIdleSeconds`/`timeToLiveSeconds`:分别表示缓存项空闲多少秒后失效(即不再被访问)和缓存项生存多少秒后失效。两者都设置为120秒...

Global site tag (gtag.js) - Google Analytics