CacheStoreMode USE和REFRESH之间有什么区别

时间:2014-05-02 07:27:40

标签: java java-ee caching jpa jpa-2.0

CacheStoreMode的javadoc区别于我无法理解的一点:

USE模式的javadoc:

  

从数据库读取时以及何时将实体数据插入/更新到缓存中   提交到数据库:这是默认行为。不强迫   从数据库读取时刷新已缓存的项目。

REFRESH模式的javadoc在最后一句中有所不同:

  

强制刷新从数据库读取的项目的缓存。

当从数据库读取时更新现有缓存实体实例时,这通常涉及覆盖现有数据。那么在这种情况下强制和不强制刷新之间的区别是什么?

谢谢。

2 个答案:

答案 0 :(得分:1)

据我所知:

    如果给定的EntityManagerFactory具有对底层数据库的独占写访问权,则应使用
  • CacheStoreMode.USE,这意味着存储在共享缓存中的实体实例不可能过时了。
  • 如果底层数据库可能被多个commiters(即EntityManagerFactory实例,不同JVM中的应用程序,外部JDBC源)访问,则应启用
  • CacheStoreMode.REFRESH,因此存储在共享缓存中的实体实例可能会变得陈旧。

由于CacheStoreMode.USE在从数据库读取时不强制刷新已缓存的实体,因此CacheStoreMode.REFRESH会这样做。

答案 1 :(得分:0)

我认为在需要数据库的最新更新数据的地方会有所不同,它会从后端而不是通过应用程序进行更新。

在我的应用程序中,它是相同的情况(但不使用任何缓存策略),我们每次都必须加载所有数据;因为它通过来自外部系统的消息隐式修改,否则我们将处理过时的数据。

可能很少有预定作业,外部系统等直接更新数据库CacheStoreMode.REFRESH的情况;而对于正常情况CacheStoreMode.USE

[除此之外我无法回忆任何其他情况,这可能会使这两种模式产生差异]


修改:文档似乎令人困惑&太短暂无法解释。此外,在本机查询的情况下,跳过批量更新等项目。没有缓存。

CacheStoreMode.USE:只有新项目被放入缓存中,而不是已经缓存的项目。 CacheStoreMode.REFRESH:将新项目放入缓存中已刷新的现有项目已刷新。