对Hibernate中的高速缓存并发中的只读vs NonRestrict读写

问题描述 投票:1回答:2

我是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.

我很困惑两者之间究竟有什么区别。

java hibernate jpa second-level-cache
2个回答
1
投票

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

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

例如,商店开放的一周中的几天。这通常不会改变,但由于一些改造,下一个星期天可能会关闭,这将导致更新缓存。

这会对持久性提供程序强制执行额外的检查和同步,因此其性能不是最高的(例如在read-only中)。

您需要判断是否更有意义尽可能使用read-only并在字典发生罕见更改时重新启动服务器或实现Non-Strict Read-Write并处理性能稍慢但不需要时不时地重新启动服务器。


1
投票

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

如果您的更新很少发生,那么出现问题的可能性很小(例如,实体的更新会发生冲突),这就是您决定承担此类风险的原因。

© www.soinside.com 2019 - 2024. All rights reserved.