【问题标题】:Read only vs NonRestrict Read Write in Cache Concurrency in HibernateHibernate 缓存并发中的只读与非限制读写
【发布时间】:2019-09-04 15:27:10
【问题描述】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      例如商店在一周中的哪几天开张。这通常不会改变,但由于一些翻新,下周日可能会关闭,这将导致缓存更新。

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

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

      【讨论】:

        猜你喜欢
        • 2021-06-07
        • 2011-12-27
        • 1970-01-01
        • 2021-06-18
        • 2011-08-15
        • 2011-11-22
        • 1970-01-01
        • 2011-07-02
        • 1970-01-01
        相关资源
        最近更新 更多