Hibeinate缓存概念整理

1. 缓存的范围
  • a. 事务范围(一级缓存)
    • i. 只能被当前事务访问
    • ii. 生命周期依赖于事务生命周期
    • iii. 缓存介质是内存
  • b. 进程范围(二级缓存)
    • i. 进程范围内所有事务共享 i. 进程范围内所有事务共享
    • ii. 依赖于进程生命周期i. 依赖于进程生命周期
    • iii. 物理介质可以为内存或硬盘 iii. 物理介质可以为内存或硬盘
  • c.集群范围(二级缓存)
    • i. 被一个或多个机器的进程共享
    • ii. 进程间通过远程通信保证数据的一致性
2.Java对象在Hibernate持久化层中的状态
  • a. 临时状态 new
  • b. 持久化状态 save()、persist(Hibernate 3)
  • c. 删除状态
  • d. 游离状态
    • i. update():把游离对象加入Session缓存 i. update():把游离对象加入Session缓存
    • ii. merge():把游离对象的属性复制到持久化对象中ii. merge():把游离对象的属性复制到持久化对象中
  • e. get()和load(),都只通过主键查询
    • i. Get()采用立即检索策略,立即执行语句i. Get()采用立即检索策略,立即执行语句
      1. 目的为了访问对象的各个属性
      2. 无返回结果时使用结果抛NullPointerException
    • ii. Load()方法采用延迟检索策略,不立即执行语句,
      1. 仅返回实体类的代理类实例,只保存实体对象的id值,占用内存少
      2. 使用到对象的其他属性时,才执行查询
        3)目的是为了删除或建立和别的对象的联系
      3. 无返回结果时使用结果抛ObjectNotFoundException
  • f.saveOrUpdate()
  • g. delete()
  • h. close()
3. 一级缓存
  • a. Session缓存
  • b. 内置的
  • c. 不能被卸除的
  • d. 一般由Hibernate自动维护的
4. Session缓存(一级缓存)清理缓存
  • a. 缓存中对象属性发生变化时,Session不会立即清理缓存执行语句,而是在特定的时间点才清理
  • b. 这让Session可以将几条相关的sql语句合并为一条语句,减少访问数据库的次数
  • c. 清理缓存时间点
    • i.调用Transection的commit()方法
    • ii. 执行查询操作时,持久化对象的属性已发生变化,为保证数据一致性
    • iii. 显示调用Session的flush()方法
5. 二级缓存(SessionFactory的缓存)
6.查询缓存
  • a. 支持条件查询(一级二级都不支持)
  • b. 依赖二级缓存
  • c. 特定条件下发挥作用
    • i. 完全相同的HQL重复执行
    • ii.重复执行期间,Query Cache对应的数据表不能有数据变动(添加、删除、修改)
    • iii. 绝大多数查询并不能从查询缓存中受益,所以Hibernate默认不进行查询缓存。
7. 通过时间戳判断查询结果是否过期
  • a. 第一刻,执行查询语句,结果放入缓存,记时间戳为t1
  • b. 第二刻,对已查询的相关表进行插入更新删除操作,记时间戳为t2
  • c.第三刻,执行查询语句,对比QueryCache区域时间戳和时间戳缓存区域,若t2>t1,则查询缓存失效
8. 延迟加载 详解 https://www.jianshu.com/p/d768d9eaefc0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值