这两个参数很容易误解,看文档根本没用,我仔细分析了ehcache的代码。结论如下:
1、timeToLiveSeconds的定义是:以创建时间为基准开始计算的超时时长;
2、timeToIdleSeconds的定义是:在创建时间和最近访问时间中取出离现在最近的时间作为基准计算的超时时长;
3、如果仅设置了timeToLiveSeconds,则该对象的超时时间=创建时间+timeToLiveSeconds,假设为A;
4、如果没设置timeToLiveSeconds,则该对象的超时时间=min(创建时间,最近访问时间)+timeToIdleSeconds,假设为B;
5、如果两者都设置了,则取出A、B最少的值,即min(A,B),表示只要有一个超时成立即算超时。
为了更好理解,可直接查看代码。摘自:net.sf.ehcache.Element.java(版本1.2.4):
/** * Returns the expiration time based on time to live. If this element also has a time to idle setting, the expiry * time will vary depending on whether the element is accessed. * * @return the time to expiration */ public long getExpirationTime() { if (!lifespanSet || eternal || (timeToLive == 0 && timeToIdle == 0)) { return Long.MAX_VALUE; } long expirationTime = 0; long ttlExpiry = creationTime + timeToLive * ONE_SECOND; long mostRecentTime = Math.max(creationTime, nextToLastAccessTime); long ttiExpiry = mostRecentTime + timeToIdle * ONE_SECOND; if (timeToLive != 0 && (timeToIdle == 0 || lastAccessTime == 0)) { expirationTime = ttlExpiry; } else if (timeToLive == 0) { expirationTime = ttiExpiry; } else { expirationTime = Math.min(ttlExpiry, ttiExpiry); } return expirationTime; }
相关推荐
通过合理设置 `maxElementsInMemory`、`eternal`、`timeToIdleSeconds`、`timeToLiveSeconds` 和 `overflowToDisk` 等参数,开发者能够有效地平衡内存使用、数据持久性和应用性能。正确利用 `defaultCache` 和 `...
ehcache.xml配置内容 <ehcache xmlns:xsi=... timeToIdleSeconds="120" timeToLiveSeconds="120" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU" /> </ehcache>
Ehcache提供内存和磁盘存储,可以设置不同的缓存策略。 - 缓存管理器(Cache Manager):它是Ehcache的核心,负责创建和管理多个缓存。 - 缓存(Cache):每个缓存都有一个唯一的名称,用于存储键值对。键必须是...
Ehcache 是一个开源的、高性能的缓存解决方案,广泛应用于Java应用程序中,尤其在提升系统性能和减少数据库负载方面表现突出。它支持内存和磁盘存储,并且可以与Java持久层框架如Hibernate、JPA等无缝集成。 ## 1. ...
总的来说,`ehcache.xsd`和`ehcache.xml`是Ehcache在MyBatis中使用的关键配置文件,它们定义了缓存的行为和规则,使得开发者可以灵活地管理和优化缓存性能。通过合理配置这两个文件,可以有效地提升基于MyBatis的...
- `eternal`: 是否永不过期,如果为false,则需要设置`timeToIdleSeconds`和`timeToLiveSeconds`。 - `timeToIdleSeconds`: 元素未被访问后多久失效。 - `timeToLiveSeconds`: 元素创建后多久失效。 - `...
1. **Time-Based**: 根据时间设置缓存项的生命周期,如`timeToIdleSeconds`和`timeToLiveSeconds`。 2. **Size-Based**: 当缓存区达到预设大小时,使用LRU(Least Recently Used)或LFU(Least Frequently Used)...
EHcache是一款广泛使用的开源Java分布式缓存系统,主要设计用于提高应用程序的性能和可伸缩性。在Java应用程序中,特别是那些基于Hibernate或MyBatis的持久层框架中,EHcache作为二级缓存工具,能够显著提升数据访问...
1. **添加Ehcache和Hibernate依赖**:在项目中,我们需要引入Ehcache和Hibernate的JAR包。这些通常可以通过Maven或Gradle等构建工具来管理。在`pom.xml`或`build.gradle`文件中,添加对应的依赖项。 2. **配置...
- `<maxElementsInMemory>`、`<eternal>`、`<timeToIdleSeconds>`、`<timeToLiveSeconds>`等属性用于控制缓存的行为和生命周期。 **4. Spring中使用ehcache:** 在Spring框架中,ehcache的集成变得更为简便。通过在...
Ehcache支持多种缓存策略,包括内存和磁盘存储,提供了缓存加载器、缓存扩展、缓存异常处理等高级功能,并且支持REST和SOAP API接口。 #### 二、Spring Boot与Ehcache集成 在Spring Boot项目中集成Ehcache可以显著...
Spring 和 Ehcache 是两个在Java开发中非常重要的框架。Spring 是一个全面的后端开发框架,提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等特性,使得应用程序的构建变得更加简洁和模块化。Ehcache...
而Ehcache则是一个非常流行的Java缓存解决方案,用于提高应用程序的性能和响应速度。本文将详细介绍如何将Ehcache集成到Spring MVC应用中,以及如何进行测试和配置。 **一、Ehcache简介** Ehcache是一个开放源代码...
timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="false"/> <!-- 可以针对特定Mapper或ResultMap配置特定的缓存 --> timeToIdleSeconds="600" timeToLiveSeconds="1200" overflowToDisk=...
Ehcache作为一款流行的开源缓存解决方案,因其轻量级、高性能和易于集成的特点,常被广泛应用于Spring框架中。本篇文章将详细介绍如何在Spring项目中集成Ehcache,以及如何通过Spring的AOP(面向切面编程)实现方法...
<cache name="com.example.MyEntity" eternal="false" maxElementsInMemory="1000" overflowToDisk="false" timeToIdleSeconds="300" timeToLiveSeconds="600"/> <!-- 更多缓存配置... --> </ehcache> ``` **...
- `timeToIdleSeconds`和`timeToLiveSeconds`: 分别表示元素空闲状态下的存活时间和总存活时间。 ### 三、ehCache API使用 在Java项目中,可以通过以下步骤使用ehCache: 1. **引入依赖**: 添加ehCache的JAR包到...
Ehcache是一款广泛使用的开源Java缓存库,它提供了内存和磁盘存储,支持分布式缓存,并且可以与Spring框架无缝结合。以下我们将详细探讨如何配置和使用Spring与Ehcache的整合。 1. **配置Ehcache** 首先,我们...
timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="false"/> </ehcache> ``` 3. **Spring配置**:在Spring的配置文件(如applicationContext.xml)中启用Ehcache支持,并加载上面的ehcache.xml...
在本文中,我们将深入探讨如何使用SpringBoot、MyBatis和Ehcache来实现缓存数据。Ehcache是一款高效且易于使用的Java内存缓存框架,对于提升应用程序性能,尤其是在处理大量数据时,能起到显著作用。虽然在分布式...