我正在尝试使用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>
感谢。
答案 0 :(得分:0)
另外,对不起可能会问明显,但是当你说“关闭”负载时这是什么意思?不关闭应用程序(和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>