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?(同样存储于内存中,一个自动化存储结果集,一个需要自己编译)
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?(同样存储于内存中,一个自动化存储结果集,一个需要自己编译)