2

我试图让 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 的错误

4

1 回答 1

3

我只是偶然发现了同样的事情,它似乎已经在大约一个月前修复了:https ://github.com/hazelcast/hazelcast/commit/602ce5835a7cc5e495b8e75aa3d4192db34d8b1a#diff-d20dd943d2216ab106807892ead44871

当您使用 Hazelcast Spring 集成时,基本上 TTL 被覆盖。

于 2014-02-12T10:52:22.527 回答