Java Hibernate中的只读与非严格读写缓存并发
我是Hibernate的初学者,在JPA二级缓存并发策略中遇到了以下概念:Java Hibernate中的只读与非严格读写缓存并发,java,hibernate,jpa,second-level-cache,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. 我不清楚这两者之间到底有什么区别。您使用只读来查询一次缓存条目,通常是在应用程序启动期间或第一次请求时查询
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.
我不清楚这两者之间到底有什么区别。您使用
只读
来查询一次缓存条目,通常是在应用程序启动期间或第一次请求时查询,并且可以确定加载的结果在应用程序的生存期内不会更改。就像在描述中一样,国家列表就是一个很好的例子
对于非严格读写
,当对缓存结果的更新可能偶尔更改时,可以使用此选项
例如,一家商店每周的营业日。一般来说,这不会改变,但由于某些翻新,下周日可能会关闭,这将导致缓存更新
这将对持久性提供程序强制执行额外的检查和同步,因此其性能不是最高的(如在只读中)
您需要判断是否尽可能使用只读
,并在字典发生罕见更改时重新启动服务器,或者执行非严格读写
,处理稍慢的性能,但不需要不时重新启动服务器。这与频率本身;这是关于缓存实现可以做的优化。当级别设置为只读时
引擎知道您的应用程序不会更新实体/集合,并可以避免一些锁定等。未详细定义非严格读写
级别,但它允许实现执行另一种优化,可能会降低一致性。在常规的读写
模式下,缓存尝试与数据库保持完全同步;在非严格
模式下,当缓存将提供过时数据(不再在DB中的数据)时,它可以打开一个简短的窗口。好处可能是性能的提高
如果您的更新不频繁,则出错的可能性很低(例如,对实体的更新将发生冲突),这就是为什么您可以决定冒这样的风险