Hibnate-缓存

  1. 修改持久化对象的属性值,并不会立即发送SQL语句,而是提交事务之前,执行flush操作的时候才会发送相应的UPDATE语句。
  2. 发送UPDATE语句时,数据的修改并不会立即生效,只有提交了事务之后,数据的修改才会永久的保存下来。

操作

flush:推送。将缓存中数据的改变落实到数据库中

refresh:刷新。将数据库中数据的改变提取到缓存中

clear:清空。清空Session缓存

Session对象默认在什么情况下执行flush操作?

显式调用Session的flush()方法

调用Transaction对象的commit()方法时,先flush缓存,在提交事务

执行HQL、QBC查询之前,先flush缓存,保证HQL或QBC查询到的数据是最新的。

refresh操作与事务隔离级别

refresh()方法读取到的数据是不是真正的最新数据,需要参照当前的事务隔离级别

一级缓存

一级缓存:又称为session级别的缓存。当获得一次会话(session),hibernate在session中创建多个集合(map),用于存放操作数据(PO对象),为程序优化服务,如果之后需要相应的数据,hibernate优先从session缓存中获取,如果有就使用;如果没有再查询数据库。当session关闭时,一级缓存销毁。

一级缓存快照:与一级缓存存放位置是一样,对一级缓存数据备份。保证数据库的数据与一级缓存的数据必须一致。如果一级缓存修改了,在执行commit提交时,将自动刷新一级缓存,执行update语句,将一级缓存的数据更新到数据库。

 二级缓存

        Hibernate维护了两个级别的缓存,一个是线程级别一级缓存,一个是进程级别二级缓存。其中一级缓存是由Session对象维护的,二级缓存是由SessionFactory维护的。

Web应用中的进程和线程

        在Web应用中Servlet容器也就是服务器的运行对应一个大的进程,而具体每一个请求的处理则是由线程执行的。所以线程级别的一级缓存只能在当前请求处理过程中可用,线程结束就释放了,存在时间很短;而二级缓存工作在进程级别所以只要服务器还在运行就一直有效。

 

 

SessionFactory的缓存分类

  1. 内置缓存:Hibernate自带的,不可卸载。通常在Hibernate的初始化阶段,Hibernate会把映射元数据和预定义的SQL语句放到 SessionFactory的缓存中。映射元数据是映射文件中数据(.hbm.xml文件中的数据)的复制。该内置缓存是只读的。
  2. 外置缓存(二级缓存):由可配置的缓存插件维护。在默认情况下,SessionFactory不会启用这个缓存插件。外置缓存中的数据是数据库数据的复制,外置缓存的物理介质可以是内存或硬盘。

数据要求

适合存入二级缓存的数据

  1. 很少被修改,经常被查询
  2. 不重要,允许出现偶尔的并发问题

不适合存入二级缓存的数据

  1. 经常被修改的数据:会由于更新不及时导致二级缓存中的数据总是错误的
  2. 财务数据,不允许任何的并发问题
  3. 与其他应用程序共享的数据

 二级缓存架构

并发访问策略

  1. 非严格读写(Nonstrict-read-write):不保证缓存与数据库中数据的一致性。提供Read Uncommited事务隔离级别,对于极少被修改,而且允许脏读的数据,可以采用这种策略
  2. 读写型(Read-write):提供Read Commited数据隔离级别。对于经常读但是很少被修改且不允许脏读的数据,可以采用这种隔离类型。
  3. 事务型(Transactional):仅在受管理环境下适用。它提供了Repeatable Read事务隔离级别,可以防止脏读和不可重复读。
  4. 只读型(Read-Only):提供Serializable数据隔离级别,对于从来不会被修改的数据,可以采用这种访问策略

并发访问策略

隔离级别

Nonstrict-read-write

Read Uncommited

Read-write

Read Commited

Transactional

Repeatable Read

Read-Only

Serializable

  • 14
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hibernate是一个Java持久化框架,它提供了一种对象关系映射(ORM)的解决方案,用于将Java对象与关系型数据库进行映射和交互。 Hibernate的主要目标是简化数据库相关操作,提供一种面向对象的方式来处理数据持久化。它允许开发人员使用面向对象的方式来操作数据库,而无需编写复杂的SQL查询和数据库操作代码。 Hibernate的核心功能包括: 1. 对象关系映射(ORM):Hibernate通过映射Java类和数据库表之间的关系,实现对象与数据库之间的转换。它将Java对象持久化到数据库中,并从数据库中检索数据,使开发人员可以使用面向对象的方式来操作数据。 2. 数据库操作:Hibernate提供了一套丰富的API和查询语言(HQL、Criteria查询),用于执行各种数据库操作,例如插入、更新、删除和查询数据。 3. 缓存管理:Hibernate提供了一个缓存机制,用于缓存从数据库中检索的数据,以提高应用程序的性能。通过缓存,Hibernate可以避免频繁地访问数据库,从而提高响应速度和减少数据库负载。 4. 事务管理:Hibernate支持事务管理,可以确保在数据库操作中的一系列操作要么全部成功提交,要么全部回滚,以保持数据的一致性和完整性。 Hibernate具有广泛的应用领域,在企业级Java应用程序开发中得到了广泛的应用。它简化了数据库操作的复杂性,提高了开发效率,并提供了灵活和可扩展的数据访问解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值