【问题标题】:How to ignore max idle seconds but keep ttl in Hazelcast JCache?如何忽略最大空闲秒数但将 ttl 保留在 Hazelcast JCache 中?
【发布时间】:2016-11-18 19:54:26
【问题描述】:
我正在尝试使用 Hazelcast 3.7.x(撰写本文时的最新版本)JCache 提供程序和声明式配置(以获得线程等的好处)。我只需要为我的用例设置 time-to-live-seconds 而不是 max-idle-seconds。仅当没有完成更新(在缓存中的条目生命周期内发生读取)时,我才需要将项目保留在缓存中。如果我不设置 max-idle-seconds 它默认为 0 并且将条目永久保存在缓存中。如果我将它设置为小于 TTL 的值,它可能会超过预期的时间,因为可能会发生读取。我在 hazelcast.xml 文档中看不到如何做到这一点。我可以使用具有不同到期策略的编程接口,但会出现初始化问题,如 Hazelcast 文档中所述。此外,如果他们可以为 JCache 提供者做到这一点,我怀疑会有一种方法可以在 XML 中做到这一点,而不仅仅是记录在案。
如果这是不可能的,并且您有一个 JCache 代码可以与编程配置一起使用,并注意线程问题,请发布。如果只是单线程创建调用的问题,我可以自己做。
谢谢
【问题讨论】:
标签:
multithreading
hazelcast
jcache
【解决方案1】:
max-idle-seconds 和 time-to-live-seconds 均不适用于 Hazelcast xml 配置中的 Jcache 配置。缓存元素只能有“expiry-policy-factory”,它只能有一个子元素“timed-expiry-policy”,并且可以选择修改、触摸等。配置如下:
<cache name="somecache">
<key-type class-name="java.lang.String"/>
<value-type class-name="java.lang.String"/>
<statistics-enabled>true</statistics-enabled>
<management-enabled>true</management-enabled>
<read-through>false</read-through>
<write-through>false</write-through>
<in-memory-format>OBJECT</in-memory-format>
<expiry-policy-factory>
<timed-expiry-policy-factory expiry-policy-type="MODIFIED" duration-amount="5" time-unit="SECONDS"/>
</expiry-policy-factory>
<backup-count>1</backup-count>
</cache>