我正在实现Oracle Coherence复制缓存。实现如下:

<?xml version="1.0"?>
<!DOCTYPE cache-config SYSTEM "cache-config.dtd">

<cache-config>

  <caching-scheme-mapping>
    <cache-mapping>
      <cache-name>EntryList</cache-name>
      <scheme-name>ENTRY_ITEMS</scheme-name>
    </cache-mapping>
  </caching-scheme-mapping>

  <caching-schemes>
    <replicated-scheme>
      <scheme-name>ENTRY_ITEMS</scheme-name>
      <backing-map-scheme>
        <local-scheme>
          <scheme-name>ENTRY_ITEMS</scheme-name>
          <unit-calculator>FIXED</unit-calculator>
          <expiry-delay>60m</expiry-delay> <!-- expire after 60 minutes -->
          <high-units>2000</high-units>
          <eviction-policy>LFU</eviction-policy>
        </local-scheme>
      </backing-map-scheme>
      <autostart>true</autostart>
    </replicated-scheme>
  </caching-schemes>
</cache-config>


tangasol-coherence-override.xml

<coherence xmlns:xsi="http://www.w4.org/2001/XMLSchema-instance"
  xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
  xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-operational-config
         coherence-operational-config.xsd">

  <cluster-config>
    <member-identity>
      <cluster-name>clusterName</cluster-name>
      <!-- Name of the first member of the cluster -->
      <role-name>RoleName</role-name>
    </member-identity>
    <unicast-listener xml-override=coherence-environment.xml/>
  </cluster-config>

</coherence>


coherence-environment.xml

<unicast-listener xmlns:xsi="http://www.w4.org/2001/XMLSchema-instance"
  xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
  xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-operational-config
         coherence-operational-config.xsd">

  <well-known-addresses>
    <socket-address id="1">
      <address>member1</address>
      <port>7777</port>
    </socket-address>
  </well-known-addresses>

  <well-known-addresses>
    <socket-address id="2">
      <address>member2</address>
      <port>7777</port>
    </socket-address>
  </well-known-addresses>
</unicast-listener>


这已实现并经过测试,可以正常运行。

我们正在测试缓存的逐出策略。为了简化测试,我执行了以下操作:


通过将高单位设置为4,我将高速缓存的大小保持为4。现在在高速缓存中添加4个条目。这应该完全填满缓存。
现在,如果我在缓存中再添加一个条目号5,那我期望将经常使用的租赁条目踢出缓存,以便为条目号5腾出空间。
下次访问新条目号5的高速缓存时,应该获得高速缓存HIT。
但这没有发生,我总是得到一个Cache MISS。
我在调试模式下运行了Java代码,发现缓存中的代码PUT的条目号为5,但此PUT操作未反映在缓存中。


现在,我绝对不是测试一致性高速缓存逐出策略的第一人。我在配置中缺少任何内容吗?我是否以错误的方式测试了驱逐。欢迎任何输入。

谢谢。

最佳答案

尝试找出问题所在:


变化<expiry-delay>1</expiry-delay>(1ms)
添加<low-units>0</low-units>(默认值为75%,即3个条目)。
尝试其他政策<eviction-policy>LRU</eviction-policy>


如果这些方法无济于事,请尝试添加自定义驱逐策略类以查看触发的驱逐。参见here

10-08 18:04