关于ehcache配置中timeToLiveSeconds和timeToIdleSeconds的区别

在使用 ehcache 作为缓存时,timeToLiveSeconds 和 timeToIdleSeconds 这两个属性容易混淆,所以在这里深入的研究并记录一下防止遗忘。

【注】只有在 eternal 为 false 时,这2个属性才有效;否则超时设置将被忽略,对象从不过期。

timeToLiveSeconds:当对象自从被存放到缓存中后,如果处于缓存中的时间超过了 timeToLiveSeconds 属性值,这个对象就会过期,EHCache 将把它从缓存中清除;即缓存自创建日期起能够存活的最长时间,单位为秒(s)

timeToIdleSeconds:当对象自从最近一次被访问后,如果处于空闲状态的时间超过了timeToIdleSeconds属性值,这个对象就会过期,EHCache将把它从缓存中清空;即缓存被创建后,最后一次访问时间到缓存失效之时,两者之间的间隔,单位为秒(s)

举个栗子:

现在假设有如下配置:

timeToIdleSeconds=60
timeToLiveSeconds=120

则一个数据被添加进缓存后,该数据能够在缓存中存活的最长时间为 120 秒(timeToLiveSeconds),而在 120 秒内,假设不止一次去缓存中拿取该数据,那么相邻 2 次获取数据的时间间隔如果小于60秒(timeToIdleSeconds),则能成功获取到数据;但如果最近一次获取<到>下一次获取的时间间隔超过60秒,那么,将得到 null,因为此时该数据已经被移出缓存了。

在正常的使用过程中 timeToLiveSeconds 必须大于 timeToIdleSeconds 才有意义。

【注】timeToIdleSeconds 与 timeToLiveSeconds 为 0 的话则意味着时间无限长。

为了方便理解上面的文字,再举一个例子。如果配置如下:

timeToIdleSeconds=60
timeToLiveSeconds=0

数据在缓存中的存活时间为无限长,这个时候数据被获取一次,如果第二次获取的时间为第一次获取时间的 60s 之后,那么第二次获取的结果为null,因为此时该数据已经被移出缓存了;如果数据被频繁的获取,每次获取的时间是上一次获取之后的 60s 以内,那么这个数据会一直有效。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注