加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 使用ehcache集群的hibernate缓存:nonstrict对严格的读

发布时间:2020-12-15 00:58:29 所属栏目:Java 来源:网络整理
导读:非限制性读写和读写之间的真正区别是什么?我可以阅读ehcache和hibernate文档,但是据我所见,他们只会说“如果你做更新,读写会更好”.我觉得不舒服 我可能有一个长期存储的缓存集合的问题配置如下: cache name="trx.domain.Parent.children" maxElementsInMe
非限制性读写和读写之间的真正区别是什么?我可以阅读ehcache和hibernate文档,但是据我所见,他们只会说“如果你做更新,读写会更好”.我觉得不舒服

我可能有一个长期存储的缓存集合的问题配置如下:

<cache name="trx.domain.Parent.children" maxElementsInMemory="5000"
    eternal="false" overflowToDisk="false" timeToIdleSeconds="1200"
    timeToLiveSeconds="1800">
    <cacheEventListenerFactory
        class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
        properties="replicateAsynchronously=true,replicatePuts=true,replicateUpdates=true,replicateUpdatesViaCopy=false,replicateRemovals=true" />
<set name="children" lazy="false" inverse="true">
    <cache usage="nonstrict-read-write"/>
    <key column="callout_id" />
    <one-to-many class="Child" />
</set>

当更新集合,在发生更新的节点和其他节点上,究竟发生了什么?这里的非限制性读写和读写有什么区别?一个节点有可能使用其从缓存中过去的10分钟版本吗?

请注意冗长的超时和异步复制.

解决方法

读写:如果两个事务尝试修改数据,那么这些事务在“已提交”级别(或可重复读取,如果数据库设置为这样)是隔离的 – 通常这是足够的,通常我们不需要“可序列化”隔离级别.

Nonstrict读写:缓存没有被锁定,所以如果两个事务修改数据,我们就不知道我们得到什么,我们不保证cache state = database state.

只有数据不太可能由两个事务同时修改,这是安全的.我们还需要设置适当的缓存超时.

有关更多细节和非常好的解释,请看这里:hibernate cache strategy

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读