一尘不染

带有ehcache的群集休眠缓存:非严格与严格读写

hibernate

nonstrict-read-write和之间的真正区别是read- write什么?我可以阅读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>

更新集合时,发生更新的节点以及其他节点上究竟发生了什么?nonstrict-read-writeread- write这里和有什么不一样?一个节点是否有可能会使用其缓存中的10分钟版本?

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


阅读 241

收藏
2020-06-20

共1个答案

一尘不染

读写:如果两个事务试图修改数据,则这些事务将在“读取已提交”级别隔离(如果数据库设置为该级别,则可以重复读取)–通常就足够了,通常我们不需要“可序列化”隔离级别。

非严格读写:缓存根本没有锁定,因此,如果两个事务修改了数据,我们将永远不知道会得到什么,我们就无法保证缓存状态=数据库状态。

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

2020-06-20