oracle一致性逐出不工作

exdqitrt  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(363)

我正在努力实现oracle缓存。具体实施如下:

<?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>

一致性环境.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号新条目的缓存时,应该会得到缓存命中。
但那不是真的,我总是找不到缓存。
我在调试模式下运行java代码,看到代码将条目号5放入缓存,但这个put操作不会反映在缓存上。
现在我肯定不是第一个测试驱逐政策的人。配置中有什么遗漏吗?我是不是在用错误的方式测试驱逐。欢迎任何意见。
谢谢。

2ekbmq32

2ekbmq321#

我试过你的例子,以3为高单位。我的观察:
当我把第四个条目放进去的时候,驱逐工作就开始了。所以,它起作用了!!
您可以使用相同的override&cache配置文件启动coherence服务器(coherence.sh)进行命令行监视。请参阅详细信息,当我使用以下命令查看缓存时会打印这些信息:
Map(?):缓存入口列表

Cache Configuration: EntryList
  SchemeName: ENTRY_ITEMS
  AutoStart: true
  ServiceName: ReplicatedCache
  ServiceDependencies
    EventDispatcherThreadPriority: 10
    ThreadPriority: 10
    WorkerThreadsMax: 2147483647
    WorkerPriority: 5
    EnsureCacheTimeout: 30000
  BackingMapScheme
    InnerScheme (LocalScheme) 
      SchemeName: ENTRY_ITEMS
      UnitCalculatorBuilder
        Calculator: FIXED
      EvictionPolicyBuilder
        Policy: LFU
      ExpiryDelay: 1h
      HighUnits
        Units: 3
      UnitFactor: 1
q8l4jmvw

q8l4jmvw2#

尝试隔离问题:
改变 <expiry-delay>1</expiry-delay> (1毫秒)
添加 <low-units>0</low-units> (默认值为75%,即3个条目)。
尝试其他策略 <eviction-policy>LRU</eviction-policy> 如果这些都没有帮助,请尝试添加自定义逐出策略类以查看是否触发逐出。请看这里:

相关问题