【问题标题】:How to differentiate between time to live and time to idle in ehcache如何区分 ehcache 中的生存时间和空闲时间
【发布时间】:2010-04-06 08:08:38
【问题描述】:

ehache 上的文档说:

timeToIdleSeconds: Sets the time to idle for an element before it expires.
i.e. The maximum amount of time between accesses before an element expires

timeToLiveSeconds: Sets the time to live for an element before it expires.
i.e. The maximum time between creation time and when an element expires.

我了解timeToIdleSeconds

但这是否意味着在创建和首次访问缓存项后,timeToLiveSeconds 不再适用?

【问题讨论】:

    标签: java ehcache


    【解决方案1】:

    timeToIdleSeconds 允许缓存对象被保留,只要它在比timeToIdleSeconds 更短的周期内被请求。 timeToLiveSeconds 将使缓存的对象在几秒后失效,无论它被请求多少次或何时被请求。

    假设timeToIdleSeconds = 3。那么这个对象在4秒内没有被请求就会失效。

    如果是timeToLiveSeconds = 90,则该对象将在 90 秒后从缓存中删除,即使它在其短暂生命的第 90 秒内被请求了几毫秒。

    【讨论】:

    • 所以我想我们总是想设置空闲时间
    • 在上面的评论中,当您说“假设 timeToIdleSeconds = 3。如果 4 秒内未请求对象,则该对象将无效。”,当您说无效时 - 这是什么意思?它会从堆中删除它吗?如果从缓存中删除对象,那么我对 timeToLive 参数的用途感到困惑。当我们进行 POC 时,我们看到数据是在 timetoIdleseconds 之后从源获取的。虽然 timetoLive 的值要高得多,但我希望它是从缓存中获取的,因为在我们的例子中,timetoLive 的值比 timeToIdle 高得多。
    • @Gayathri 如果您有一个经常访问(每两秒)但 TTL 为 60 秒的数据项。即使它被持续访问(从不空闲),它仍然会每 60 秒从源中提取一次。
    • 作为第一条评论的后续行动(@JacquesRenéMesrine)。对于 TTL 和 TTI 都设置(即大于零)的情况:1) TTI >= TTL:TTI 无效。条目在creationTime + TTL 之后被认为过期 2) TTI min((max(lastAccessTime, creationTime) + TTI), (creationTime + TTL)) 之后条目被认为过期
    • “无视”->“无视”
    【解决方案2】:

    如果同时设置,expirationTime 将是Math.min(ttlExpiry, ttiExpiry),其中

    ttlExpiry = creationTime + timeToLive
    ttiExpiry = mostRecentTime + timeToIdle
    

    完整源代码here.

    【讨论】:

    • 现在这种行为对我来说是有意义的。感谢您指出这一点,尤其是 Math.min 部分。
    • 这段代码比上面的人工解释更清楚:-)
    【解决方案3】:

    来自old 1.1 documentation(可在 Google Cache 中找到,它比当前的文档 AFAIK 更易于浏览且信息量更大):

    timeToIdleSeconds

    这是一个可选属性。

    合法值是介于 0 和 Integer.MAX_VALUE 之间的整数。

    它是一个元素从它存在以来应该存在的秒数 最后使用。使用意味着插入或访问。

    0有一个特殊的含义,就是不检查Element的时间 闲置,即它将永远闲置。

    默认值为 0。

    timeToLiveSeconds

    这是一个可选属性。

    合法值是介于 0 和 Integer.MAX_VALUE 之间的整数。

    它是一个元素从它存在以来应该存在的秒数 创建的。 Created 表示使用 Cache.put 插入缓存 方法。

    0有一个特殊的含义,就是不检查Element的时间 活,即它会永远活下去。

    默认值为 0。

    【讨论】:

      猜你喜欢
      • 2021-12-07
      • 1970-01-01
      • 2012-08-09
      • 1970-01-01
      • 2010-10-14
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 2021-08-23
      相关资源
      最近更新 更多