JPA后台缓存刷新

mar*_*tin 8 java spring caching jpa ehcache

我们有一个高性能的Java(J2SE)中间件应用程序,其中延迟是最重要的.它使用遗留数据库中保存的一些常设数据,其中遗留应用程序可以对数据进行临时修改.由于延迟要求,我们计划使用JPA和Hibernate以及可能的缓存提供程序(如Ehcache)来缓存常备数据.

但是,当站点数据更新(由旧版应用程序)时,我们需要尽快通知此情况.我想在缓存上设置一个到期时间,但是在应用程序发出下一个数据请求之前,缓存不会刷新 - 此时由于数据库重新读取,延迟将会生效.

理想情况下,我们需要缓存来返回过时的值,并在后台使用数据库中的最新值定期更新/刷新缓存.

这可能与Ehcache有关吗?我见过SelfPopulatingCache和CacheLoader,但这似乎我做了很多工作(我必须为每个实体编写代码).另外,有没有人有CacheLoader实现的例子?我希望查询缓存上有一个异步刷新选项.

还有其他技术可以提供解决方案吗?我们不受JPA提供程序或缓存提供程序的约束.

Spring @Cacheable可以提供解决方案吗?我看过spring ehcache cachable提到自填充缓存范围,但我不清楚这意味着什么.

提前致谢.

Jam*_*mes 5

你用的是什么数据库?

EclipseLink 2.4将提供数据库事件驱动的缓存失效功能.它与Oracle数据库DCN/QCN集成.您也可以使用触发器来解决问题.

http://wiki.eclipse.org/EclipseLink/Examples/JPA/DCN

您可能还希望调查Oracle GoldenGate,Coherence和TopLink Grid.


Whi*_*g34 1

如果您可以更改旧应用程序,那么一种选择是使用ActiveMQ之类的东西发送缓存失效通知。如果您无法更改旧应用程序,另一个选择是将索引时间戳/行版本列添加到您的表中,并定期轮询它以了解自上次轮询以来的更改。