Infinispan 2LC:在查询缓存中指定区域的实体缓存
Infinispan 2LC : entity cache with regions specified in query cache
我有一个 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小时内没有执行查询,缓存结果将过期。
我有一个 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小时内没有执行查询,缓存结果将过期。