Hibernate之缓存同步策略

缓存同步决定了数据对象在缓存中的存取规则;为了使得缓存调度遵循正确的应用级事务隔离机制,必须为每个实体类指定相应的缓存同步策略;

Hibernate中提供4种内置的缓存同步策略;

  • read-only(只读缓存)

对于不会发生改变的数据,可使用只读型缓存;

<class name="com.keith" mutable="false">

    <cache usage="read-only"/>

    ....

</class>
 
  • nonstrict-read-write(非严格读/写)

程序的并发访问下的数据同步要求不是非常严格,且数据更新操作,频率较低,可采用本项;

  • read-write(严格的读/写)

基于时间戳判定机制,实现了“read committed” 事务隔离等级,可用于对数据库同步要求严格的情况,不支持分布式缓存;

<class name="com.keith" .... >

    <cache usage="read-write"/>

    ....

    <set name="kittens" ... >

        <cache usage="read-write"/>

        ....

    </set>

</class>
 
  • transactional(事务型缓存)

必须运行在JTA事务环境中;实现了Repeatable Read事务隔离等级,有效地保障数据的合法性,适用于关键数据的缓存;目前在Hibernate内置的的Cache中,只有JBoss Cache支持事务性的Cache实现;

在事务型缓存中,缓存的相关操作也被添加到事务之中(此时的缓存,类似于一个内存数据库),如果由于某些原因导致事务失败,将会连同缓冲池中的缓存数据一起回滚到事务开始之前的状态;

不同的缓存实现,可支持的缓存同步策略也各不相同;

Cacheread-onlynonstrict-read-writeread-writetransactional
Hashtable (not intended for production use)yesyesyes
EHCacheyesyesyes
OSCacheyesyesyes
SwarmCacheyesyes
JBoss Cache 1.xyesyes
JBoss Cache 2yesyes

相关推荐