【问题标题】:Coherence distributed cache expiry per Namedcache每个 Namedcache 的一致性分布式缓存到期
【发布时间】:2016-03-30 01:57:53
【问题描述】:

我们如何为任何特定缓存(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>

【问题讨论】:

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


    【解决方案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 中使用过期,但我不确定 Coherence 是否真的会清理缓存。

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

    see JavaDoc

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

    【讨论】:

    • 谢谢@Arkadiy .. 你的指点很有帮助。我使用了方案继承,并为我希望驱逐的缓存定义了另一个方案。主要有两个原因。 1) 我正在使用 entryProcessor 向该特定缓存添加/更新条目,因此 cdn 没有使用 put()。 2)正如你所建议的,这更干净,我们不必更改 java 类文件,以防过期时间需要修改。此外,值得一提的是 x 现在已弃用,因为 coherence 3.5。 Coherence 在这方面变得成熟起来。无论如何,谢谢!
    猜你喜欢
    • 2013-09-01
    • 2018-11-23
    • 2010-10-25
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多