我们有一个高性能的Java(J2SE)中间件应用程序,延迟是最重要的。它使用一些保存在遗留数据库中的静态数据,其中遗留应用程序可能会偶尔修改数据。由于延迟要求,我们计划使用JPA和Hibernate以及Ehcache等缓存提供程序来缓存静态数据。
但是,当静态数据被更新(由遗留应用程序)时,我们需要尽快得到通知。我考虑在缓存上设置过期时间,但这样缓存将不会被刷新,直到应用程序下一次请求数据时 - 在这个时候,由于重新读取数据库,延迟将受到影响。
理想情况下,我们需要缓存返回旧值,并在后台以定期间隔更新/刷新来自数据库的最新值。
Ehcache是否支持这种方式?我看到了SelfPopulatingCache和CacheLoader,但这似乎需要编写大量代码(我需要为每个实体手动编写代码)。此外,有没有人有CacheLoader实现的示例?我希望在查询缓存上获得异步刷新选项。
但是,当静态数据被更新(由遗留应用程序)时,我们需要尽快得到通知。我考虑在缓存上设置过期时间,但这样缓存将不会被刷新,直到应用程序下一次请求数据时 - 在这个时候,由于重新读取数据库,延迟将受到影响。
理想情况下,我们需要缓存返回旧值,并在后台以定期间隔更新/刷新来自数据库的最新值。
Ehcache是否支持这种方式?我看到了SelfPopulatingCache和CacheLoader,但这似乎需要编写大量代码(我需要为每个实体手动编写代码)。此外,有没有人有CacheLoader实现的示例?我希望在查询缓存上获得异步刷新选项。
是否有其他技术能够提供解决方案?我们不受JPA提供程序或缓存提供程序的限制。
Spring @Cacheable能提供解决方案吗?我看到spring ehcache cachable提到了自动填充缓存作用域,但我不清楚这是什么意思。
提前感谢。