Infinispan 2LC:在查询缓存中指定区域的实体缓存

Infinispan 2LC : entity cache with regions specified in query cache

我有一个 entity A,它被定义为 @Cacheable。我有查询缓存加载 entity A 在指定的缓存区域下说 "regionA"。这是通过 setHint 和启用缓存实现的。

至于wildfly中的设置,regionA没有配置evictionexpiration配置为1天,而entity缓存有默认 evictionexpiration 假设如下。

        <local-cache name="entity">
            <transaction mode="NON_XA"/>
            <eviction strategy="LRU" max-entries="10000"/>
            <expiration max-idle="1000000"/>
        </local-cache>
        <local-cache name="local-query">
            <eviction strategy="LRU" max-entries="10000"/>
            <expiration max-idle="100000"/>
        </local-cache>
        <local-cache name="regionA" statistics-enabled="true">
            <eviction strategy="NONE" max-entries="-1"/>
            <expiration lifespan="86400000" max-idle="14400000"/>
        </local-cache>

现在,如果我第一次执行,没有查询缓存结果,因此 SQL 是 运行 获取实体。后来第二个 运行、第三个似乎是从缓存 regionA 中获取的,因此没问题。但是 18 小时后,我尝试 运行 相同的查询,看起来查询又是 运行。

但我想如果查询缓存配置为“1 天”过期,为什么它会再次 运行 SQL?是因为 entity 缓存到那个时候已经过期了吗?所以 entity 缓存不采用缓存区域特定设置? 如何区分存储在特定缓存区域中的这些实体遵循区域特定设置。

谢谢。

你有max-idle="14400000"这意味着如果在过去4小时内没有执行查询,缓存结果将过期。