我正在尝试Ehcache的后写功能,以实现对数据库的高并发写入的混淆。 现在,我有一切工作(我写入缓存,然后在配置的策略下),缓存调用我的CacheWriter实现进行后写。 但是,我需要在某个时间点(例如,当应用程序将要关闭或在集成测试中)时,将所有挂起的缓存值“刷新”到CacheWriter。 换句话说,我想调用Ehcache将所有脏值“提交”到CacheWriter。
如何实现这一目标?
提前致谢
答案 0 :(得分:0)
也许您可以使用其关闭监听器:http://ehcache.org/documentation/operations/shutdown
答案 1 :(得分:0)
面对同样的问题,我已经采取了轮询和等待:
WriteBehindManager writerManager = (WriteBehindManager) cache.getWriterManager();
Stopwatch createStarted = Stopwatch.createStarted();
while (writerManager.getQueueSize() > 0 && createStarted.elapsed(TimeUnit.SECONDS) < 30) {
Thread.yield();
}
其中Stopwatch是Guava库中的计时器对象。我浏览过这些来源,但是从EHCache 2.9开始,没有故意刷新代码中的WriteBehindQueue
。此解决方案假定写入缓存的任何代码也正在关闭,并且maxWriteDelay
+上次写入操作的延迟不会超过30秒。