缓存原理?
将一些重要的、核心数据加载到内存中,存放起来;当应用程序需要访问该数据时,直接从内存中获取该数据;(从内存中获取数据,而不是从磁盘上读取数据)
Hibernate中的缓存管理:
Hibernate中缓存分为:一级缓存(Session缓存)、二级缓存(SessionFactory缓存)。
一级缓存(Session缓存)由Hibernate自带。
特点:
1. 必须使用。
2. session关闭的时候,缓存自动清空。
3. 手动清除缓存。(clear()——清除所有session中的缓存;evict(Object obj)——清除指定的对象; flush() —— 刷新缓存)
二级缓存(SessionFactory缓存)Hibernate提供支持的接口(外部缓存库)。
特点:
1. 所有用户可以共享数据。(跟具体的session对象无关)
2. 消耗更多的内存资源。
3. 查询速度变快、修改时(增、删、改)需要维护缓存和数据库。
如何使用二级缓存(步骤)(EHCache缓存):
1. 修改hibernate.cfg.xml配置文件。(指定缓存插件、启动二级缓存功能)
<property name="cache.provider_class"> org.hibernate.cache.EhCacheProvider </property> <property name="cache.use_second_level_cache">true</property>
1. 在src目录下,创建EHCache缓存的配置文件(ehcache.xml)。
2. 在*.hbm.xml配置文件中,添加<cache usage="read-write"/>。
注意:
清除二级缓存中的对象: //清除所有类型 HibernateSessionFactory.getSessionFactory().evict(Emp.class); //清除指定对象 HibernateSessionFactory.getSessionFactory().evict(Emp.class, 1); //清除集合中的所有对象 HibernateSessionFactory.getSessionFactory().evictCollection("com.zuxia.entity.Dept.emps"); 时间到达时,自动清除对象: <defaultCache maxElementsInMemory="500" eternal="false" timeToIdleSeconds="时间" timeToLiveSeconds="时间" overflowToDisk="true" /> 当时间到达时,自动清除对象;eternal="false"必须为false才有效。 HQL语句默认不会执行缓存查询: <property name="cache.use_query_cache">true</property> 查询时,调用Query中setCacheable(true)方法进行缓存查询。 注意:根据HQL查询语句,缓存对象。(两条语句相同时,才能执行查询缓存)