hibernate二级缓存介绍与实践
1.Hibernate二级缓存介绍
由于SessionFactory对象的生命周期和应用程序的整个过程对应,因此Hibernate二级缓存是进程范围或者集群范围的缓存,
有可能出现并发问题,因此需要采用适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别。
第二级缓存是可选的,是一个可配置的插件,默认下SessionFactory不会启用这个插件。
Hibernate提供了org.hibernate.cache.CacheProvider接口,它充当缓存插件与Hibernate之间的适配器。
Hibernate二级缓存在于sessionFactory,sessionFactory关闭,二级缓存消失(二级缓存默认开启)。
2.Hibernate二级缓存原理
Hibernate的二级缓存的实现原理与一级缓存是一样的,也是通过以ID为key的Map来实现对对象的缓存。
3.什么样的数据适合存放到第二级缓存中?
1) 很少被修改的数据
2) 不是很重要的数据,允许出现偶尔并发的数据
3) 不会被并发访问的数据
4) 常量数据
4.什么样的数据不适合存放到第二级缓存中?
1) 经常被修改的数据
2) 绝对不允许出现并发访问的数据,如财务数据,绝对不允许出现并发
3) 与其他应用共享的数据
5.二级缓存管理
evict(Class arg0, Serializable arg1)将某个类的指定ID的持久化对象从二级缓存中清除,释放对象所占用的资源
sessionFactory.evict(Customer.class,new Integer(1));
evict(Class arg0) 将指定类的所有持久化对象从二级缓存中清除,释放其占用的内存资源。
sessionFactory.evict(Customer.class);
evictCollection(String arg0) 将指定类的所有持久化对象的指定集合从二级缓存中清除,释放其占用的内存资源。
sessionFactory.evictCollection("Customer.orders");
6.二级缓存的配置,常用的二级缓存插件:
EHCache org.hibernate.cache.EhCacheProvider
OSCache org.hibernate.cache.OSCacheProvider
SwarmCahe org.hibernate.cache.SwarmCacheProvider
JBossCache org.hibernate.cache.TreeCacheProvider
7.二级缓存简单操作实现
(1)创建Java项目,整个项目如图:
(2)配置book.hbm.xml与Book(同hibernate一级缓存一样)
(3)二级缓存是通过<cache>元素来进行配置的,所以在book.hbm.xml里面配置加入
<cache usage="read-only" />
(4)Hibernate2.cfg.xml里面需要添加配置
<property name="cache.use_second_level_cache">true</property> <!--true默认开启 --!>
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
<property name="hibernate.cache.use_query_cache">true</property>
(5)增加EHCache配置参数
(6)测试类Demo2
(7)效果展示 (cache配置后区别,二级缓存开启时只查询一条SQL)