nonstrict-read-write和之间的真正区别是read- write什么?我可以阅读ehcache和Hibernate文档,但据我所知,他们只说“如果进行更新,读写会更好”。我觉得不满意。
nonstrict-read-write
read- write
我可能对这样配置的长期缓存集合有问题:
<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-write和read- write这里和有什么不一样?一个节点是否有可能会使用其缓存中的10分钟版本?
请注意冗长的超时和异步复制。
读写:如果两个事务试图修改数据,则这些事务将在“读取已提交”级别隔离(如果数据库设置为该级别,则可以重复读取)–通常就足够了,通常我们不需要“可序列化”隔离级别。
非严格读写:缓存根本没有锁定,因此,如果两个事务修改了数据,我们将永远不知道会得到什么,我们就无法保证缓存状态=数据库状态。
仅当不太可能由两个事务同时修改数据时,这才是安全的。我们还需要设置适当的缓存超时。