首页 文章

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

提问于
浏览
1

我有 entity A,它被定义为 @Cacheable . 我有查询缓存加载 entity 在指定的缓存区域下"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来获取实体 . 在第二次运行后,3rds似乎从缓存 regionA 中获取,因此可以 . 但是在18小时之后,我尝试运行相同的查询,看起来再次运行查询 .

但我想如果查询缓存配置为"1 day"到期,为什么它再次运行 SQL ?是因为 entity 缓存到期了吗?那么 entity 缓存不会采用特定于缓存区域的设置?如何区分存储在特定缓存区域中的这些实体遵循区域特定设置 .

谢谢 .

1 回答

  • 3

    您有 max-idle="14400000" 这意味着如果查询在过去4小时内未执行,则缓存的结果将过期 .

相关问题