我试图让 Hazelcast 3.0.2 与 Spring 抽象一起工作,但似乎 TTL 功能不起作用。
我已经通过以下方式配置了我的 spring 上下文
<cache:annotation-driven cache-manager="cacheManager" mode="proxy" proxy-target-class="true" />
<bean id="cacheManager" class="com.hazelcast.spring.cache.HazelcastCacheManager">
<constructor-arg ref="hzInstance" />
</bean>
<hz:hazelcast id="hzInstance">
<hz:config>
<hz:group name="instance" password="password" />
<hz:properties>
<hz:property name="hazelcast.merge.first.run.delay.seconds">5</hz:property>
<hz:property name="hazelcast.merge.next.run.delay.seconds">5</hz:property>
<hz:property name="hazelcast.logging.type">slf4j</hz:property>
<hz:property name="hazelcast.jmx">true</hz:property>
<hz:property name="hazelcast.jmx.detailed">true</hz:property>
</hz:properties>
<hz:network port="8995" port-auto-increment="true">
<hz:join>
<hz:tcp-ip enabled="true">
<hz:interface>10.0.5.5</hz:interface>
<hz:interface>10.0.5.7</hz:interface>
</hz:tcp-ip>
</hz:join>
</hz:network>
<hz:map name="somecache"
backup-count="1"
max-size="0"
eviction-percentage="30"
read-backup-data="false"
time-to-live-seconds="120"
eviction-policy="NONE"
merge-policy="hz.ADD_NEW_ENTRY" />
</hz:config>
</hz:hazelcast>
然后我制作了一个简单的测试类,具有以下方法
@Cacheable("somecache")
public boolean insertDataIntoCache(String data) {
logger.info("Inserting data = '{}' into cache",data);
return true;
}
我还做了一些方法来打印 Hazelcast 找到的每张地图以及里面的全部信息。插入数据和缓存似乎工作正常,但是即使我将 TTL 设置为 120 秒,该条目也永远不会过期。
当我从缓存中写入数据时,它显示有一个名为“somecache”的映射,该映射的 TTL 为 120 秒,但是当我遍历条目时,它会找到我插入的所有过期时间为 0 的映射。我不是 hazelcast 的行为(也许地图 ttl 优先于条目 ttl),但无论如何它都不会过期。
有人知道 3.0.2 和 spring 缓存有什么问题吗?我还应该提到,我在同一个应用程序服务器中运行旧版本的 Hazelcast 的其他应用程序,但是它们有自己的单独配置,我的测试应用程序似乎保持自己并且不与任何东西冲突。
任何输入表示赞赏。
编辑1:
如果我降级到使用 HZ 2.6.3 似乎可以工作,所以看起来 hazelcast 3 中的某个地方存在关于 TTL 的错误