Kon*_*rus 11 java hibernate ehcache distributed-caching
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" />
Run Code Online (Sandbox Code Playgroud)
<set name="children" lazy="false" inverse="true">
<cache usage="nonstrict-read-write"/>
<key column="callout_id" />
<one-to-many class="Child" />
</set>
Run Code Online (Sandbox Code Playgroud)
更新集合时,在更新发生的节点和其他节点上发生了什么?nonstrict-read-write和read-write这里有什么区别?节点是否可能使用缓存中过时的10分钟版本?
请注意冗长的超时和异步复制.
Pio*_*ski 16
读写:如果两个事务试图修改数据,那么这些事务在"读提交"级别被隔离(或者可重复读取,如果数据库设置为那个) - 通常这就足够了,通常我们不需要"可序列化"隔离级别.
非严密读写:缓存根本没有锁定,所以如果两个事务修改数据我们永远不知道我们得到了什么,我们不保证缓存状态=数据库状态.
只有当两个事务不太可能同时修改数据时,这才是安全的.我们也需要设置适当的缓存超时.
有关更多详细信息和非常好的解释,请查看此处:hibernate缓存策略