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

猜你喜欢

转载自blog.csdn.net/weixin_43236610/article/details/82768378