1

我正在尝试 Ehcache 的后写功能,以实现对数据库的高并发写入的合并。现在,我一切正常(我写入缓存,然后在配置的策略下),缓存正在调用我的 CacheWriter 实现以进行后写。但是,我需要在某个时间点(例如,当应用程序将要关闭时,或在集成测试中),将所有挂起的缓存值“刷新”到 CacheWriter。换句话说,我想调用 Ehcache 将所有脏值“提交”到 CacheWriter。

关于如何实现这一目标的任何想法?

提前致谢

4

2 回答 2

0

也许你可以使用它的关闭监听器:http ://ehcache.org/documentation/operations/shutdown

于 2012-10-12T11:03:48.010 回答
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 秒。

于 2016-03-01T10:08:01.257 回答