【问题标题】:Ehcache and HibernateEhcache 和休眠
【发布时间】:2011-10-22 06:08:37
【问题描述】:

我有一个场景,我在使用 Spring MVC 的网页上显示数据库中频繁更改(由外部应用程序更改)的数据,有点类似于股票监控应用程序。目前我正在使用一个守护线程,它在 web 容器启动时触发,每 45 秒查询一次数据库,并将数据存储在应用程序范围的 hashmap 对象中。 Web 应用程序从 hashmap(而不是数据库)中读取数据以显示数据。

我已经了解了第三方缓存 API,例如 EhcacheOSCache。我已阅读有关 Ehcache 的文档,似乎我可以使用 Hibernate 查询缓存技术而不是守护线程。

现在我的查询如果我使用休眠并启用查询缓存并将 timetoidle 设置为 45 秒,缓存中的数据将自动刷新以反映数据库中的最新数据还是我需要强制刷新(再次查询数据库并重新填充cache) 缓存,你能不能解释一下什么是自填充缓存。

【问题讨论】:

标签: java ehcache


【解决方案1】:

Ehcache docsSelfPopulatingCache被描述为:

Ehcache 的自填充装饰器,可按需创建条目。

这意味着当向SelfPopulatingCache 请求一个值并且该值不在缓存中时,它将为您创建该值。 This blog article 提供了很多细节和代码(包括自动更新)。

对我来说,听起来 Ehcache SelfPopulatingCache 最适合您的需求。所以我建议仔细看看。

据我了解,Hibernate 二级缓存肯定有助于提高系统性能,但不能解决您的问题。使用 Ehcache 并设置 timeToIdleSeconds 时确实如此,缓存在该时间后过期,但不会自动刷新。

看看Hibernate docs write about query cache

查询缓存不缓存缓存中实际实体的状态;它只缓存标识符值和值类型的结果。出于这个原因,对于那些预期作为查询结果缓存的一部分缓存的实体(就像集合缓存一样),查询缓存应该始终与二级缓存一起使用。

最后,OSCache 已经过时了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 2011-07-13
    • 2017-08-12
    • 2011-07-18
    • 1970-01-01
    • 2010-09-08
    相关资源
    最近更新 更多