hibernate的缓存机制

hibernate一级缓存
 
一级缓存很短和session的生命周期一致,一级缓存也叫session级的缓存或事务级缓存

那些方法支持一级缓存:
 * get()
 * load()
 * iterate(查询实体对象)
 
如何管理一级缓存:
 * session.clear(),session.evict()
 
如何避免一次性大量的实体数据入库导致内存溢出
 * 先flush,再clear
 
如果数据量特别大,考虑采用jdbc实现.


hibernate二级缓存

二级缓存也称进程级的缓存或SessionFactory级的缓存,二级缓存可以被所有的session共享
二级缓存的生命周期和SessionFactory的生命周期一致,SessionFactory可以管理二级缓存

二级缓存的配置和使用:
 * 将echcache.xml文件拷贝到src下
 * 开启二级缓存,修改hibernate.cfg.xml文件
  <property name="hibernate.cache.use_second_level_cache">true</property>
 * 指定缓存产品provider类,修改hibernate.cfg.xml文件
  <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
 * 指定那些实体类使用二级缓存(两种方法)
  * 在映射文件中采用<cache>标签
  * 在hibernate.cfg.xml文件中,采用<class-cache>标签
   

echcache.xml
maxElementsInMemory="10000"     :缓存对象的最大数目
        eternal="false"                    :是否永不过期,true为不过期,false为过期
        timeToIdleSeconds="120"      :对象处于空闲状态的最多秒数
        timeToLiveSeconds="120"      :对象处于缓存状态的最多秒数
        overflowToDisk="true"          :对象内存溢出时是否将溢出的对象写入硬盘 

 


<cache usage="read-only"/>: 设置该持久化类的二级缓存并发访问策略;
read-only:只读型并发访问策略
read-write;读取型并发访问策略
nonstrict-read-write:非常严格读写型并发访问策略
transacitional:事物型并发访问策略;


inverse:表示关联关系的维护工作由谁来负责,默认是false,表示由主控方负责关联关系的维护,如果设为true表示将由被控方来维护关联关系


casade:
“all”:表示所有操作在关联层级尚进行连锁操作;
“save-update”:表示只有save与update操作进行连锁操作
detele:表示只有delete操作进行连锁操作

 

 

注意:对于比较保密、重要的内容不能放在二级缓存中,因为所有的二级缓存可以被所有的session共享,那样数据就不安全了。

 

附件是二级缓存的配置文件。 

 

 

你可能感兴趣的:(xml,Hibernate,cache,jdbc,配置管理)