【问题标题】:EhCache Cache and CacheWriter flushEhCache Cache 和 CacheWriter 刷新
【发布时间】:2012-10-12 01:52:52
【问题描述】:

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

知道如何实现这一目标吗?

提前致谢

【问题讨论】:

  • 对了,我试过了:cache.flush();没有结果...

标签: java ehcache


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    面对同样的问题,我求助于轮询和等待:

    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 秒。

    【讨论】:

      猜你喜欢
      • 2019-11-30
      • 2012-02-05
      • 2017-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-30
      • 2015-05-12
      相关资源
      最近更新 更多