Hibernate二级缓存的并发访问策略和常用插件

本节主要介绍 Hibernate 二级缓存的并发访问策略和常用的四种插件。

二级缓存的并发访问策略

两个并发的事务同时访问持久层缓存中的相同数据时,可能会出现各类并发问题,所以也需要采用必要的隔离措施解决这些问题。

由于在二级缓存中也会出现并发问题,因此在 Hibernate 的二级缓存中,可以设定以下四种类型的并发访问策略,以解决这些问题。每一种访问策略对应一种事务隔离级别,具体介绍如下:

1)只读型(Read-Only)

提供 Serializable 事务隔离级别,对于从来不会被修改的数据,可以采用这种访问策略。

2)读写型(Read-write)

提供 Read Committed 事务隔离级别,对于经常读但是很少被修改的数据,可以采用这种隔离类型,因为它可以防止脏读。

3)非严格读写(Nonstrict-read-write)

不保证缓存与数据库中数据的一致性,提供 Read Uncommitted 事务隔离级别,对于极少被修改,而且允许脏读的数据,可以采用这种策略。

4)事务型(Transactional)

仅在受管理环境下使用,它提供了 Repeatable Read 事务隔离级别。对于经常读但是很少被修改的数据,可以采用这种隔离类型,因为它可以防止脏读和不可重复读。

二级缓存的常用插件

Hibernate 二级缓存需要通过配置二级缓存的插件才可以正常使用,常用的插件有四种,具体如下:

1)EHCache

可作为进程范围内的缓存,存放数据的物理介质可以是内存或硬盘,对 Hibernate 的查询缓存提供了支持。

2)OpenSymphony OSCache

可作为进程范围内的缓存,存放数据的物理介质可以是内存或硬盘;它提供了丰富的缓存数据过期策略,并且对 Hibernate 的查询缓存提供了支持。

3)SwarmCache

可作为集群范围内的缓存,但不支持 Hibernate 的查询缓存。

4)JBossCache

可作为集群范围内的缓存,支持 Hibernate 的查询缓存。

以上的四种缓存插件所支持的并发访问策略如表 1 所示(√代表支持)。

表 1 缓存插件支持的并发访问策略
二级缓存的常用插件 只读型 非严格读写 读写型 事务型
EHCache  
OSCache  
SwarmCache    
JBossCache    

在 Hibernate 中,不是所有的数据都适合放置在二级缓存中,一般情况下,可以将很少被修改的、不重要的且不会被并发访问的数据放置在二级缓存中。