hibernate缓存策略:
hibernate一级缓存要点:
-
hibernate框架内置的
-
hibernate强制执行
-
session级别,同一个session可访问,不同session无法访问。
-
查询时query.list()每次都会从数据库中查询,不会查询缓存; query.iterator()会从缓存中查询。若查询不到,再去数据库查询。
-
缓存清除方法5.1:session.evict(emp)清除缓存中指定对象。5.2:session.clear()清除该session所有缓存。若清除后,则query.iterator()无法得到缓存,还是会从数据库中查询。
-
事务级别,不会出现并发问题
二级缓存要点:(全局缓存、应用及缓存,是可插拔的缓存)
1.第三方提供,如EHcache,OScache等
2.默认关闭
3.应用级别,随着sessionFactory关闭而关闭。
4.所有session共享该二级缓存,缓存可运行在内存,当内存满了就硬化到硬盘
5.二级缓存有存活时间,可以配置最大缓存对象数,缓存最大存活时间、缓存最大空闲时间等
6.二级缓存使用场景,查询较多、没有并发或者并发少、内容不具有很高的时效性,不像股票等、内容重要程度不高。
7.二级缓存配置
①导包EHcache.jar和commons.logging.jar,以及ehcache.xml文件
②配置hibernate.cfg.xml文件
<property name="cache.use_second_level_cache">true</property>
<!-- 该属性指定对哪些类进行read-only缓存, 是可选方案。这样在hbm.xml中就可以不用配置<cache>标签 -->
<!-- <class-cache usage="read-only" class="com.hibernate.many2many.entity.Employee"/> -->
<property name="cache.provider_configuration_file_resource_path">/ehcache.xml</property>
<!-- 指定二级缓存的外部实现类 -->
<property name="cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</property>
③配置实体类的映射文件hbm.xml中的缓存策略
<!-- 放在class标签内的第一行 -->
<!-- usage指定配置缓存模式为只读,include指定是为所有属性添加缓存还是为非懒加载属性配置缓存。region指定专门为该对象创建一个缓存区域 -->
<cache usage="read-only" include="all" region="Employee"/>
详细配置请参考: