hibernate缓存

hibernate缓存

hibernate提供了两个级别的缓存

  • 一级缓存 session级别的缓存,属于事务范围的缓存,由hibernate来管理
  • 二级缓存 sessionFactory级别的缓存,属于进程范围内的缓存

一级缓存

一级缓存是session级别的缓存,且是一种强制使用的缓存,不可以关闭,保证一个session中两次请求同一个对象时,取得的对象是同一个Java实例

二级缓存

二级缓存是属于sessionFactory的外置缓存,默认情况下hibernate是不会启用的,需要第三方的插件

hibernate允许使用的缓存插件

  • EHCache 可作为进程范围内的缓存,支持hibernate查询缓存
  • OpenSysphony OSCache 可作为进程范围内的缓存,支持hibernate查询缓存
  • SwarmCache 可作为集群范围内的缓存,不支持hibernate的查询缓存
  • JBossCache 可作为集群范围内的缓存,支持hibernate的查询缓存

二级缓存的使用

在hibernate.cfg.xml中配置启用二级缓存

xml 复制代码
<!-- 启用二级缓存 -->
<property name="cache.use_second_level_cache">true</property>
<!-- 二级缓存指定第三方插件 -->
<property name="hibernate.cache.provider_class"></property>
<!-- 配置哪个类使用二级缓存 -->
<class-cache class="com.zhanghe.study.model.User" usage="read-write"/>

usage为并发策略

  • transactional 为主读数据使用这个策略,在一次更新的罕见状况下并发事务阻止过期数据是关键的
  • read-write 为主读数据再一次使用这个策略,在一次更新的罕见状况下并发事务阻止过期数据是关键的
  • nonstrict-read-write 这个策略不保证缓存和数据库之间的一致性。如果数据几乎不改变并且过期数据不是很重要,使用这个策略
  • read-only 一个适合永不改变数据的并发策略。只为参考数据使用它

哪个类使用二级缓存的配置也可以在.hbm.xml中配置

xml 复制代码
<cache usage="read-write"/>

如果有关联关系的话,还需要再进行设置集合的二级缓存

xml 复制代码
<!-- collection表示的是全类名加上集合属性名 这时候只会缓存OID-->
<collection-cache collection="com.zhanghe.study.model.many2one.Customer.orderList" usage="read-write"/>
<!-- 在缓存该集合类的实际类型 -->
<class-cache class="com.zhanghe.study.model.many2one.Order" usage="read-write"/>

上述配置对于查询缓存不生效,需要再加上以下配置,并且在查询时使用query.setCacheable(true),查询缓存依赖于二级缓存

xml 复制代码
<!-- 开启查询缓存 -->
<property name="cache.use_query_cache">true</property>

zhhll.icu/2020/框架/hib...

本文由mdnice多平台发布

相关推荐
期待のcode26 分钟前
Java虚拟机的运行模式
java·开发语言·jvm
程序员老徐28 分钟前
Tomcat源码分析三(Tomcat请求源码分析)
java·tomcat
a程序小傲38 分钟前
京东Java面试被问:动态规划的状态压缩和优化技巧
java·开发语言·mysql·算法·adb·postgresql·深度优先
仙俊红39 分钟前
spring的IoC(控制反转)面试题
java·后端·spring
阿湯哥40 分钟前
AgentScope Java 集成 Spring AI Alibaba Workflow 完整指南
java·人工智能·spring
小楼v1 小时前
说说常见的限流算法及如何使用Redisson实现多机限流
java·后端·redisson·限流算法
与遨游于天地1 小时前
NIO的三个组件解决三个问题
java·后端·nio
czlczl200209251 小时前
Guava Cache 原理与实战
java·后端·spring
yangminlei2 小时前
Spring 事务探秘:核心机制与应用场景解析
java·spring boot
记得开心一点嘛3 小时前
Redis封装类
java·redis