hibernate的二级缓存

本文详细介绍了Hibernate的一级缓存和二级缓存机制,包括Session和SessionFactory的作用及生命周期,以及如何利用内置缓存和外置缓存提高查询效率。特别讨论了二级缓存的并发控制策略和针对不同查询类型的缓存方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hibernate的缓存分为session和sessionfactory,后者作为工厂负责生成session


session是一级缓存,生命周期是事务级别的,随着事务开始、结束。结束后session自动关闭。
session是只读的,不可卸载的,随着项目启动将基本的session属性加载好。


sessionfactory的生命周期是进程级别或集群级别(集群数据库的情况下)
分为内置缓存与外置缓存,内置缓存与session相似,只读,不可卸载,随着项目启动初始化基本属性(包括预编译的sql)。


外置缓存是一个可插拔的组件,也就是我们常说的二级缓存
二级缓存是进程级别的,因此要并发冲突造成的影响,因此有事务级别的隔离策略
二级缓存将查询的信息通过id来进行存储,查询顺序是一级缓存--二级缓存--数据库,同时这个查询结果 新增到缓存中
事务性操作时,同步更新缓存


Hibernate的二级缓存策略,是针对于ID查询的缓存策略,对于条件查询则毫无作用。为此,Hibernate提供了针对条件查询的Query缓存。
 
Hibernate 组成一个Query Key,Query Key包括条件查询


根据这个Query Key到Query缓存中查找对应的结果列表。


 Query Key中的SQL涉及到一些表名,如果这些表的任何数据发生修改、删除、增加等操作,这些相关的Query Key都要从缓存中清空。




总结  hibernate的流程就是 查询session-查不到-查询sessionfactory(id策略或query条件策略)-查不到-查数据库,并将结果存储到相应的缓存策略中
事务性操作后,更新相关缓存策略



二级缓存是不是相当于一个已经自动化的redis?(同样存储于内存中,一个自动化存储结果集,一个需要自己编译)









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值