【问题标题】:Ehcache cached item is wrongehcache缓存项错误
【发布时间】:2012-02-03 07:04:08
【问题描述】:

我使用 hibernate + ehcache 来读取工作流引擎数据库。 hibernate 不会在该数据库上写入任何内容。 如果我在缓存中设置 TimetoLive 设置,除非 TimetoLive 到达,否则缓存不会反映任何数据库更改。

数据库更改是由工作流引擎API完成的,所以没有办法使用hibernate来写数据库。

ehcache 不应该知道缓存已过期并为我做更新吗?

有什么干净的方法可以解决缓存错误的问题吗?

【问题讨论】:

    标签: java hibernate caching ehcache


    【解决方案1】:

    除非 TimetoLive 到达,否则缓存不会反映任何数据库更改。

    这就是预期的功能!这些二级缓存除了将数据存储在哈希映射中之外什么都不做,并且对更改一无所知,除非您告诉它或将对象逐出缓存并重新读取它们的时间。

    解决这个问题的方法是不要在易失性对象上使用缓存。

    【讨论】:

    • 感谢您的回复,由于我不会在我的业务逻辑中手动使缓存失效,因此我不会在工作流数据库中使用缓存。相反,我只会使用我的数据库中的缓存。
    • 如果您发现没有缓存的情况下性能无法接受(这种情况很少发生),您可以研究缓存复制策略,例如 gemfire、terracota、coherance
    【解决方案2】:

    如果我在缓存中设置 TimetoLive 设置,除非 TimetoLive 到达,否则缓存不会反映任何数据库更改。

    所以这意味着你没有使用它。

    数据库更改是由工作流引擎API完成的,所以没有办法使用hibernate来写数据库。

    因此,作为后一种方式(到 timetoLive),这意味着您需要缓存模式来读写或非严格读写(检查类似的名称)。如果它没有反映变化,我假设两件事

    1. 您的工作流引擎正在使用休眠
    2. 而且您的缓存设置是只读的

    【讨论】:

    • 感谢您的回复,休眠是只读的,缓存也设置为只读,所以时间戳缓存永远不会更新,这就是问题所在。我不会在工作流数据库上使用 ehcache。
    猜你喜欢
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 2012-12-12
    • 2016-09-20
    • 1970-01-01
    相关资源
    最近更新 更多