繁体   English   中英

CacheStoreMode USE和REFRESH之间有什么区别

[英]What is the difference between CacheStoreMode USE and REFRESH

CacheStoreMode的javadoc区别于我无法真正掌握的一点:

USE模式的javadoc:

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

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

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

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

谢谢。

我所知道的:

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

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

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

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

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

[除此之外我不能回忆任何其他情况,这可能会使这两种模式有所不同]


编辑:文档似乎令人困惑,太短,无法正确解释。 此外,在本机查询的情况下,批量更新等项目将被跳过并且不会被缓存。

CacheStoreMode.USE :只将新项放入缓存中,而不是已缓存的项。 CacheStoreMode.REFRESH :将新项目放入缓存中,并刷新已存在的缓存项目。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM