浏览 3072 次
锁定老帖子 主题:Hibernate---缓存机制一
精华帖 (0) :: 良好帖 (0) :: 新手帖 (9) :: 隐藏帖 (2)
|
|
---|---|
作者 | 正文 |
发表时间:2010-03-27
一。 持久化层的缓存 的范围 缓存的范围决定了缓存的生命周期以及可以被谁访问。缓存的范围分为三类。 1:事务范围:缓存只能被当前事务访问。缓存的生命周期依赖于事务的生命周期,当事务结束时,缓存也就结束生命周期。在此范围下,缓存的介质是内存。事务 可以是数据库事务或者应用事务,每个事务都有独自的缓存,缓存内的数据通常采用相互关联的对象形式。 2:进程范围:缓存被进程内的所有事务共享。这些事务有可能是并发访问缓存,因此必须对缓存采取必要的事务隔离机制。缓存的生命周期依赖于进程的生命周 期,进程结束时,缓存也就结束了生命周期。进程范围的缓存可能会存放大量的数据,所以存放的介质可以是内存或硬盘。缓存内的数据既可以是相互关联的对象形 式也可以是对象的松散数据形式。松散的对象数据形式有点类似于对象的序列化数据,但是对象分解为松散的算法比对象序列化的算法要求更快。 3:集群范围:在集群环境中,缓存被一个机器或者多个机器的进程共享。缓存中的数据被复制到集群环境中的每个进程节点,进程间通过远程通信来保证缓存中的 数据的一致性,缓存中的数据通常采用对象的松散数据形式。 持久化层可以提供多种范围的缓存。如果在事务范围的缓存中没有查到相应的数据,还可以到进程范围或集群范围的缓存内查询,如果还是没有查 到,那么只有到数据库中查询。事务范围的缓存是持久化层的第一级缓存,通常它是必需的;进程范围或集群范围的缓存是持久化层的第二级缓存,通常是可选的。
二。持
久化层的缓存的并发访问策略
当多个并发的事务同时访问持久化层的缓存的相同数据时,会引起并发问题,必须采用必要的事务隔离措施。
在进程范围或集群范围的缓存,即第二级缓存,会出现并发问题。因此可以设定以下四种类型的并发访问策略,每一种策略对应一种事务隔离级别。
1: 事务型(Transactional)策略:仅仅在受管理环境中适用。它提供了Repeatable
Read事务隔离级别。对于经常被读但很少修改的数据,可以采用这种隔离类型,因为它可以防止脏读和不可重复读这类的并发问题。
2: 读写型(read-write)策略:提供了Read
Committed事务隔离级别。仅仅在非集群的环境中适用。对于经常被读但很少修改的数据,可以采用这种隔离类型,因为它可以防止脏读这类的并发问题。
3: 非严格读写型(nonstrict-read-write)策略:不保证缓存与数据库中数据的一致性。如果存在两个事务同时访问缓存中相
同数据的可能,必须为该数据配置一个很短的数据过期时间,从而尽量避免脏读。对于极少被修改,并且允许偶尔脏读的数据,可以采用这种并发访问策略。
4)
只读型策略(read-only):对于从来不会修改的数据,如参考数据,可以使用这种并发访问策略。
事务型并发访问策略是事务隔离级别最高,只读型的隔离级别最低。事务隔离级别越高,并发性能就越低。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-03-29
在集群环境中,缓存被一个机器或者多个机器的进程共享。缓存中的数据被复制到集群环境中的每个进程节点,进程间通过远程通信来保证缓存中的数据的一致性,缓存中的数据通常采用对象的松散数据形式。
=============== 这个 好像一级缓存不能实现吧! |
|
返回顶楼 | |
发表时间:2010-03-29
缓存中为啥要事物呢?不是很明白
所有的缓存数据都存在内存中,那么只有读的问题。全部都读。如果是单一的SERVER,就不会有缓存同步问题。 如果是集群,就要考虑缓存同步问题。 |
|
返回顶楼 | |
发表时间:2010-03-29
scholers 写道 缓存中为啥要事物呢?不是很明白
所有的缓存数据都存在内存中,那么只有读的问题。全部都读。如果是单一的SERVER,就不会有缓存同步问题。 如果是集群,就要考虑缓存同步问题。 Hibernate 中Session 和SessionFactory ,Session属于事务的我们可不考虑并发,但是SessionFacotry我们就要考虑了.. |
|
返回顶楼 | |