管理Hibernate的缓存
1. 什么是缓存?
介于应用程序和硬盘之间的临时存储空间——称为缓存;使用缓存可以明显提升应用程序性能(降低磁盘访问的次数)。
磁盘的访问次数愈多,相对的程序的性能就越低...
缓存可以理解为内存中一块特殊的存储区域。
2. 为什么需要使用缓存(优缺点)?
2.1 优点:提升应用程序性能(N倍增加)。
2.2 缺点:消耗大量的内存空间;经常发生变化的数据,不适合使用缓存(更新数据时,需要更新缓存+物理磁盘数据)。
3. Hibernate中缓存的分类?
Hibernate提供两种缓存的使用:一级缓存(Session)、二级缓存(SessionFactory)。
一级缓存Hibernate默认使用(必须使用);
二级缓存可选。
常见的二级缓存:EHCache、OSCache、SwramCache 、JBossCache缓存。
4. 如何使用缓存?
一级缓存(Session缓存)——默认缓存。
Session对象在查询数据时,先到缓存中检测是否存在该数据。 (有:直接获取;没有:到数据库中查询,将数据存放在session缓存中) 缓存清除两种情况:1. 手动清除缓存。 2. 关闭Session。 |
清除缓存:session.evict(对象名); |
二级缓存(SessionFactory缓存)——外部插件(EHCache)。
原理:查询的数据,会自动存放在SessionFactory中,只要SessionFactory不关闭,数据始终存在。(Session每次获取数据时都会到二级缓冲中查找)。
配置二级缓冲步骤:
1. 导入EHCache的jar包。
2. 在hibernate.cfg.xml中配置二级缓冲(启用二级缓存)。
记得在hibernate.cfg.xml文件中添加:
<property name="show_sql">true</property>
<property name="cache.use_query_cache">true</property>
<property name="cache.use_second_level_cache">ture</property>
<property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>这几个属性!
3. 在src目录下,添加一个配置文件(ehcache.xml)用来配置缓存的对象。
4. 在xxxx.hbm.xml中添加<cache>标签用来表示是否缓存该对象。
注意:HQL语句默认不会执行缓存查询;如果需要添加缓存查询功能:
1. 在hibernate.cfg.xml中添加属性:cache.use_query_cache = true;
2. 在Query对象中设置setCacheable(true).list();
一般情况下,在单个类与set中添加缓存!