我有一个 entity
a,它被定义为 @Cacheable
。而且我有查询缓存,在指定的高速缓存区域中加载entity
A表示" regiona"。这是由setHint
完成的,并启用了缓存。
至于wildfly
中的设置,regionA
配置为没有eviction
和expiration
为1天,其中entity
缓存具有默认的eviction
和expiration
。
<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个小时内未执行查询,则缓存结果到期。