我对HIbernate 缓存机制的理解
Cache主要是为了提高系统的性能的。HIbernate由于直接JDBC的一个方面就是因为它的缓冲机制。Hibernate有两级缓存。
第一级缓存就是事务级缓存。很重要也是必须的。这一级缓存的对象是在persistence context中缓存的持久化对象。这级缓存
可以保证对应于数据库同一行的对象只有一个实例。因此不存在并发的问题。
第二级缓存是进程级别的缓存。这里缓存的对象为同一个session factory生成的所有persistence context共享。因为是多线程
共享,所以存在并发的问题。同一个对象在不同的persistence context里也是不同的copy。基于并发的原因,只有那些经常被读取,而
很少被变更的对象才适合进入这一级缓存。所以,这一级缓存是可选的,并且可以配置到具体的class以及class里面的集合属性。
在配置hibernate缓存的时候有两步。第一是并发策略,有四种:Transactional,Read-write,Nonstrict-read-write和Read-only。依次并发要求
越来越松,性能也越来越好。要根据要缓存对象的特性选择。第二步是选择物理的cache-provider。通常是EHCache, OSCache还有JbossCache等。
不同的provider也不一定支持全部的并发策略,要注意选择。根据不同的对象特性,在cache-provider的配置里,也要配置不同的缓冲策略,包括
缓存数量,要不要disk缓存,闲置丢出时间以及超时时间等等。
第一级缓存就是事务级缓存。很重要也是必须的。这一级缓存的对象是在persistence context中缓存的持久化对象。这级缓存
可以保证对应于数据库同一行的对象只有一个实例。因此不存在并发的问题。
第二级缓存是进程级别的缓存。这里缓存的对象为同一个session factory生成的所有persistence context共享。因为是多线程
共享,所以存在并发的问题。同一个对象在不同的persistence context里也是不同的copy。基于并发的原因,只有那些经常被读取,而
很少被变更的对象才适合进入这一级缓存。所以,这一级缓存是可选的,并且可以配置到具体的class以及class里面的集合属性。
在配置hibernate缓存的时候有两步。第一是并发策略,有四种:Transactional,Read-write,Nonstrict-read-write和Read-only。依次并发要求
越来越松,性能也越来越好。要根据要缓存对象的特性选择。第二步是选择物理的cache-provider。通常是EHCache, OSCache还有JbossCache等。
不同的provider也不一定支持全部的并发策略,要注意选择。根据不同的对象特性,在cache-provider的配置里,也要配置不同的缓冲策略,包括
缓存数量,要不要disk缓存,闲置丢出时间以及超时时间等等。