每个Namedcache的Coherence分布式缓存到期

时间:2015-12-23 15:33:25

标签: java hibernate java-ee caching oracle-coherence

我们如何为任何特定缓存(NamedCache)的每个缓存条目设置驱逐策略/到期时间。例如,我可能配置了两个缓存,但是只想根据时间为其中一个缓存设置驱逐策略。

根据下面的配置文件,我要求仅为“TEST2CACHE”缓存设置驱逐,比如1天后到期。怎么做?

任何指针都会有所帮助。感谢。

这里是我的coherence config xml文件的示例 -

    <cache-mapping>
        <cache-name>TEST1CACHE</cache-name>
        <scheme-name>MyDistributedCache</scheme-name>
    </cache-mapping>

    <!-- Application Configuration Cache -->
    <cache-mapping>
        <cache-name>TEST2CACHE</cache-name>
        <scheme-name>MyDistributedCache</scheme-name>
    </cache-mapping>

</caching-scheme-mapping>

<caching-schemes>
    <distributed-scheme>
        <scheme-name>MyDistributedCache</scheme-name>
        <service-name>MyDistributedCache</service-name>
        <lease-granularity>member</lease-granularity>
        <backing-map-scheme>
            <read-write-backing-map-scheme>
                <internal-cache-scheme>
                    <local-scheme>
                        <unit-calculator>BINARY</unit-calculator>
                    </local-scheme>
                </internal-cache-scheme>
                <cachestore-scheme>
                    <class-scheme>
                        <class-name>spring-bean:myCacheStore</class-name>
                        <init-params>
                            <init-param>
                                <param-name>setEntityName</param-name>
                                <param-value>{cache-name}</param-value>
                            </init-param>
                        </init-params>
                    </class-scheme>
                </cachestore-scheme>
            </read-write-backing-map-scheme>
        </backing-map-scheme>
        <autostart>true</autostart>
    </distributed-scheme>
</caching-schemes>

1 个答案:

答案 0 :(得分:1)

您正在为两个缓存使用相同的“MyDistributedCache”架构,因此如果您要添加驱逐策略,它将影响它们:

示例:

<local-scheme>
  <unit-calculator>BINARY</unit-calculator>
  <expiry-delay>10d</expiry-delay>
  <flush-delay>1d</flush-delay>
</local-scheme>

我敢打赌你不想创建两个几乎相同的方案,所以解决方案可能是使用方案继承 Link to Coherence Documentation

至少你可以重用部分缓存。

另一个值得检查的选项是在API中使用expiration,但我不确定Coherence是否会实际清理缓存。

NamedCache.put(Object oKey,
           Object oValue,
           long cMillis)

see JavaDoc

我建议使用不同的缓存方案。