hibernate缓存策略

hibernate缓存策略:

    ​hibernate一级缓存要点:

  1. hibernate框架内置的

  2. hibernate强制执行

  3. session级别,同一个session可访问,不同session无法访问。

  4. 查询时query.list()每次都会从数据库中查询,不会查询缓存; query.iterator()会从缓存中查询。若查询不到,再去数据库查询。

  5. 缓存清除方法5.1:session.evict(emp)清除缓存中指定对象。5.2:session.clear()清除该session所有缓存。若清除后,则query.iterator()无法得到缓存,还是会从数据库中查询。

  6. 事务级别,不会出现并发问题

二级缓存要点:(全局缓存、应用及缓存,是可插拔的缓存)

    ​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"/>

详细配置请参考:

配置ehcache.xml文件

二级缓存配置

发布了21 篇原创文章 · 获赞 2 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_34291570/article/details/82776944