Hibernate中的只读与vs.

时间:2019-04-14 13:23:26

标签: java hibernate jpa second-level-cache

我是Hibernate的初学者,在JPA二级缓存并发策略中遇到了以下概念:

Read-Only: Used when the cache is never updated. Data like names of countries etc are suitable candidate

Non-Strict Read-Write: Data that is rarely updated.

我对两者之间的确切区别感到困惑。

2 个答案:

答案 0 :(得分:1)

您将read-only用于通常在应用程序启动期间或在第一次请求时被查询一次的缓存条目,并且可以确定,加载的结果在应用程序生存期内将永远不会改变。像描述中一样,国家列表就是一个很好的例子。

对于Non-Strict Read-Write,当对缓存结果的更新可能偶尔更改时,可以使用此选项。

例如,商店在星期几营业。通常,这不会改变,但是由于进行了一些装修,下个星期日可能会关闭,这将导致缓存的更新。

这会在持久性提供程序上执行附加检查和同步,因此其性能不是最高的(例如read-only)。

您需要判断在任何可能的情况下使用read-only是否更相关,并在字典发生罕见变化时重新启动服务器,或者实施Non-Strict Read-Write并处理性能稍慢但没有需要不时重新启动服务器。

答案 1 :(得分:1)

这与每秒的频率无关;这是关于缓存实现可以实现的优化。当级别设置为read-only时,引擎会知道您的应用程序将不更新实体/集合,并且可以避免某些锁定等。non-strict read-write级别没有详细定义,但是它允许该实现会进行另一种优化,可能会降低一致性。在常规read-write模式下,缓存会尝试与数据库保持完全同步;在non-strict模式下,当高速缓存将提供过时的数据(DB中不再存在的数据)时,它可以打开一个简短的窗口。好处可能是提高性能。

如果不经常进行更新,则出现问题的可能性很小(例如,对实体的更新会发生冲突),这就是为什么您可以决定冒险的原因。