Ehcache后写缓存线程优先级

时间:2011-02-09 04:44:49

标签: java hibernate ehcache

我正在尝试使用Ehcache后写缓存将批量事务写入我的数据库。我需要的是后写缓存以5秒的间隔(或更频繁地)转储事务。

我必须遗漏一些东西,因为尽可能地尝试,它只是不起作用。我设置了后写缓存,然后将加载到服务器上。成千上万,然后成千上万的交易,等待几分钟后,数据库中仍然没有任何内容。直到我关闭服务器上的负载,缓存才开始写入数据库。

这是线程优先级的问题吗?有没有办法修改Ehcache以执行数据库写操作,即使服务器负载不足?

这是我的配置:

<cache name="server.db.model.Request"
 maxElementsInMemory="10000"
 eternal="false"
 timeToIdleSeconds="5"
 timeToLiveSeconds="5"
 overflowToDisk="false"
 memoryStoreEvictionPolicy="FIFO">
    <cacheWriter writeMode="write_behind" maxWriteDelay="5" rateLimitPerSecond="5"
     writeCoalescing="true" writeBatching="true" writeBatchSize="5000"
     retryAttempts="2" retryAttemptDelaySeconds="10">
        <cacheWriterFactory class="server.db.util.RequestCacheWriterFactory"/> 
    </cacheWriter>
</cache>

感谢。

2 个答案:

答案 0 :(得分:0)

嗯......真的很奇怪。我们一直在进行广泛的测试,并且从未体验过编写器线程永远不会获得CPU时间。你在运行什么操作系统?创建CacheManager的线程是否以较低的优先级运行?

另外,对不起可能会问明显,但是当你说“关闭”负载时这是什么意思?不关闭应用程序(和CacheManager)?基本上我要问的是“事务划分确实发生在writeAll / deleteAll方法中,对吧?”......

最后一句话,因为这是用hibernate标记的,你没有在hibernate二级缓存上配置后写权限吗?那只是一个错误的标签,不是吗?

答案 1 :(得分:0)

最后,将我的配置更改为可行的方法 - 虽然我仍然不确定哪个参数更改有所不同。

<cache name="server.db.model.Request"
  maxElementsInMemory="10000" 
  maxElementsOnDisk="0"
  eternal="false"
  timeToIdleSeconds="5"
  timeToLiveSeconds="5">
      <cacheWriter writeMode="write_behind" maxWriteDelay="5" 
        writeCoalescing="false" writeBatching="true" writeBatchSize="5000"
        retryAttempts="2" retryAttemptDelaySeconds="10"
        notifyListenersOnException="false" writeBehindMaxQueueSize="10000" 
        writeBehindConcurrency="10" >
         <cacheWriterFactory class="server.db.util.RequestCacheWriterFactory" />
      </cacheWriter>
</cache>