缓存:为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能。
缓存的工作原理:
物理数据源——>(数据)缓存——>(数据)内存
在应用程序中首先会选择在缓存中读取数据,如果缓存中没有再选择在数据库中读取并把读取的数据放到缓存中;有点类似寄存器。
在Hibernate中使用不同的Session对象进行数据库操作,他们之间不能共享同一个缓存;也就是不同的Session对象多次查询同一个对象是会产生多条查询语句。
Hibernate一级缓存:
1.一级缓存有成为Session缓存,会话缓存;
2.通过Session对象从数据库中查询实体,会把实体在内存中存储起来,下一次查询该实体时,直接从内存中读取;
3.一级缓存的声明周期和Session对象的生命周期相同;
4.一级缓存中的数据适用于当前缓存中;
一级缓存无法取消,可以用两个方法进行管理:
1.evict():用于将某个对象从Session的一级缓存中清除;
2.clear():用于将一级缓存中的所有对象全部清除;
在查询的时候有时也不会使用缓存如:
Query query=session.CreateQuery("*******");
query.list():不会使用缓存,query.iterate():会使用缓存;
二级缓存:
二级缓存也称为全局缓存,在所有的Session的对象都会共享一个缓存;
二级缓存的配置步骤:
1.添加二级缓存的Jar包;
2.在hibernate的配置文件中添加provide类的描述:
<!-- 指定二级缓存的外部实现类 -->
<property name="cache.provider_class">net.sf.encache.hibernate.EhCacheProvider</property>
3.添加encache.xml到项目中;
4.在需要被缓存的表的映射文件添加<cache>标签
二级缓存的适应数据:
很少被修改的、不重要、参考数据