当前位置: 首页 > 知识库问答 >
问题:

在Ehcache3XML配置中设置TTL和TTI

计阳泽
2023-03-14

我试图完成的是为缓存设置TTL(生存时间)和TTI(空闲时间),以便密钥在TTL时间之后过期,或者在TTI期间未被访问的情况下可以提前过期。

在Ehcache 2中,可以使用以下配置:

<cache name="my.custom.Cache"
       timeToIdleSeconds="10"
       timeToLiveSeconds="120">
</cache>

在Ehcache 3中,类似的配置块如下所示:

<cache alias="my.custom.Cache">
    <expiry>
        <tti unit="seconds">10</tti>
        <ttl unit="minutes">2</ttl>
    </expiry>
</cache>

问题是这样的配置被认为是无效的,因为ehcache.xsd声明在< code>expiry标记下应该只有一个选项(或者是< code>tti或者是< code>ttl,但不是两个都有)。

共有1个答案

毕魁
2023-03-14

正如Louis Jacomet在邮件列表中提到的:

为了实现您想要的,您需要创建一个自定义的到期,您可以对过期执行此操作。builder(),它是在3.3.1中引入的,或者带有到期接口的自定义实现。

但是请注意,您对Ehcache 2中的过期情况的解释稍有错误。当您组合TTL和TTI时,无论是否访问该元素,该元素对整个TTL都保持有效。但是,如果在接近TTL周期结束时对其进行访问,则最后一次访问时间TTI可以使其在缓存中停留更长时间。如果在此期间再次访问,则再次更新最后访问时间,从而延长映射的寿命。

在Ehacache3中的过期工作方式略有不同,因为我们在每次创建、访问或更新映射时都有效地计算过期时间。这样做是为了减少存储映射的开销。

因此,如果将过期配置为 getExpiryForCreation 返回 120 秒,但 getExpiryForAccess 返回 10 秒,则创建但从不访问的元素将在 120 秒后被视为过期。虽然创建但已访问的元素将在上次访问后 10 秒被视为已过期,即使该时间仍在 120 秒内。当你想到它时,TTI确实是一个奇怪的概念,我们保留了JCache兼容性,但它实际上更接近驱逐而不是过期。因为它对正在读取的值的新鲜度意味着什么?虽然这确实意味着这是缓存中不应被逐出的有用值。

在 XML 中,不能结合使用 tti 和 ttl 快捷方式。但是,您可以通过完全限定的类名来配置过期时间。我们应该考虑扩展 XML 系统,以便您可以在代码中执行一些等效的添加生成器。

 类似资料:
  • 问题内容: 我可以在Redis中设置全局TTL吗?每次设置密钥时,都无需设置TTL。 我用谷歌搜索,但找不到任何线索。看来似乎无法完成? 谢谢。 问题答案: 不,Redis没有全局/默认TTL的概念,是的,您必须为每个键分别设置它。但是,根据您的要求和要执行的操作,可能还有其他方法可以实现您的目标。换句话说,您为什么需要它? 例如,如果您想将Redis用作缓存,而不必担心必须删除“旧”项目,则只需

  • 问题内容: 我正在尝试对Spring 3.1 的注释支持,并且想知道是否有任何方法可以通过设置TTL在一段时间后清除缓存的数据?现在,从我看到的内容中,我需要使用和自己清除它,并与我一起使用可以实现TTL实现,但是对于这样一个简单的任务来说似乎有点多了吗? 问题答案: 如何设置TTL / TTI /驱逐策略/ XXX功能? 直接通过你的缓存提供程序。缓存抽象是…好吧,抽象不是缓存实现 因此,如果你

  • 我如何设置信封上的TTL由受限制收件人签名? 我搜索了并搜索了StackOverflow。令人惊讶的是,我看到了Docusign可以说信封已过期的引用,但我没有看到如何设置信封的过期时间。 在我的测试中,我生成了一堆我寄给自己的信封,但我没有签名。Docusign不断发送有关它们的提醒。现在从信封生成到现在已经2天了。我不想让客户在他们应该签字后很久才收到关于它的电子邮件。 我的意图是将它们从我的

  • JTA事务意外回滚(可能是由于超时);嵌套的异常是 由于JPA,我得到了一个超时异常:如何增加事务所需的时间? 我应该在哪里包括参数来解决这个问题? 我用的是Tomcat7。

  • 我可以使用以下命令在Git Bash中运行Spring Bootjar: 我现在正在尝试用IntelliJ运行应用程序。运行配置包含以下内容: 当我运行应用程序在我的IDE我得到: IllegalStateException:缺少必需的加密配置属性:jasypt.encryptor.password 我尝试在我的系统环境变量、运行配置环境变量中设置的值,并直接在

  • 问题内容: 我可以看到文档说我们可以在文档上设置,但不能在索引/索引上设置。还想知道如果我们设置它是否对性能有影响。 问题答案: 已为每个索引启用,但有效期为每个文档。 如果您希望索引“过期”,请删除它们。更简单,更高效。 是的,对性能有影响。Elasticsearch处理“过期”数据的“方式”是创建基于时间的索引。意思是,您每天或每周都会创建一个索引。在该索引中索引属于该日/周的所有内容。您决定