`

笔记: Hibernate缓存机制

阅读更多

一级缓存:事务级缓存 或 Session级缓存
    其实质是由Hibernate自动维护的一个map,根据id来缓存实体对象(不存放普通属性的查询)
    ***不能跨sesseion/transaction访问
    无论是list(), load()还是iterate,只要读出的是对象, 都会自动填充一级缓存
    但是list()本身不去使用缓存, iterate是先去DB中select id出来,在一个一个load(),如果缓存中有就直接返回,没有的话再去数据库中查询
   
二级缓存
    SessionFactory级别的缓存,它是属于进程范围或群集范围的缓存,可以跨session访问
    一般由EhCache, OSCache等实现
    也只是针对ID来缓存实体对象
    1) EhCache:可作为进程范围的缓存,存放数据的物理介质可以是内存或硬盘,对Hibernate的查询缓存提供了支持。
    2) OSCache:可作为进程范围的缓存,存放数据的物理介质可以是内存或硬盘,提供了丰富的缓存数据过期策略,对Hibernate的查询缓存提供了支持。
    3) SwarmCache:可作为群集范围内的缓存,但不支持Hibernate的查询缓存。
    4) JBossCache:可作为群集范围内的缓存,支持事务型并发访问策略,对Hibernate的查询缓存提供了支持。
   
    适合存放到第二级缓存中的数据
    1) 很少被修改的数据
    2) 不是很重要的数据,允许出现偶尔并发的数据
    3) 不会被并发访问的数据
    4) 参考数据,指的是供应用参考的常量数据,它的实例数目有限,它的实例会被许多其他类的实例引用,实例极少或者从来不会被修改。

    不适合存放到第二级缓存的数据?
    1) 经常被修改的数据
    2) 财务数据,绝对不允许出现并发
    3) 与其他应用共享的数据。
   
查询缓存
    默认是关闭的。查询缓存是针对普通属性结果集的缓存, 对实体对象的结果集只缓存id
    查询缓存的生命周期,当前关联的表发生修改,那么查询缓存生命周期结束
   
    Hibernate的Query缓存策略的过程如下:
      1) Hibernate首先根据这些信息组成一个Query Key,Query Key包括条件查询的请求一般信息:SQL, SQL需要的参数,记录范围(起始位置rowStart,最大记录个数maxRows),等
      2) Hibernate根据这个Query Key到Query缓存中查找对应的结果列表。如果存在,那么返回这个结果列表;如果不存在,查询数据库,获取结果列表,把整个结果列表根据Query Key放入到Query缓存中
      3) Query Key中的SQL涉及到一些表名,如果这些表的任何数据发生修改、删除、增加等操作,这些相关的Query Key都要从缓存中清空

一些注意事项:
    1) 针对普通属性结果集的缓存
    2) 对是实体对象的结果集,只缓存id
    3) 用查询缓存,需要打开查询缓存,并且在调用list方法之前需要显示的调用query.setCacheable(true);
    4) 查询缓存与session无关,即在一个session上做了查询缓存,那么在另一个session中可以取到查询缓存的内容,不再发出SQL
    5) 查询缓存只对query.list()操作有效,query.iterate()操作不会使用查询缓存
    6) 一级缓存与二级缓存是缓存实体,而查询缓存是缓存普通属性

分享到:
评论

相关推荐

    韩顺平.2011版.hibernate笔记.zip

    9. 性能优化:最后,笔记会探讨一些Hibernate的性能优化技巧,如批处理、缓存策略、延迟加载的合理使用等,以提高应用程序的运行效率。 总之,《韩顺平.2011版.hibernate笔记》全面地介绍了Hibernate的各个方面,...

    hibernate笔记.txt

    2. **持久化机制**:Hibernate提供了一套完整的对象持久化机制,包括缓存、事务管理、以及对实体对象的生命周期管理等,大大简化了Java应用程序与数据库之间的交互过程。 3. **懒加载和级联操作**:Hibernate支持懒...

    马士兵hibernate学习笔记(原版)

    7. **性能优化**:Hibernate的性能优化主要包括缓存机制(第一级缓存、第二级缓存)、批处理、延迟加载等策略,通过合理设置和使用,可以显著提高应用程序的运行效率。 8. **Annotation与XML配置**:Hibernate支持...

    传智播客2016hibernate框架学习笔记

    8. **缓存机制**:Hibernate提供了一级缓存和二级缓存,能有效减少数据库访问,提高应用性能。 9. **实体生命周期**:Hibernate定义了持久化对象的生命周期状态,包括临时态、瞬时态、持久态和脱管态,理解这些状态...

    struts笔记 hibernate笔记

    5. **二级缓存**:Hibernate支持缓存机制,通过插件如Ehcache,可以提高数据访问效率,减少对数据库的直接访问。 6. **实体生命周期**:Hibernate定义了对象的四种状态(瞬时态、持久态、托管态、脱管态),理解...

    Hibernate备课笔记.pdf

    4. Cache:Hibernate内置了二级缓存机制,包括一级缓存Session和二级缓存SessionFactory,提高了数据访问速度。 二、Hibernate配置 1. 配置文件:hibernate.cfg.xml是Hibernate的主要配置文件,包含了数据库连接...

    hibernate框架开发2016版视频 四天学习笔记完整版

    - 缓存机制:介绍Hibernate的一级缓存(Session级别)和二级缓存(SessionFactory级别),以及如何配置和利用缓存提高性能。 - 事务管理:讨论Hibernate如何支持事务,以及如何在代码中控制事务的提交和回滚。 - ...

    hibernate笔记

    Hibernate支持缓存机制,第二级缓存可以存储已持久化的对象,提高查询性能。它可以是进程内缓存(如:EHCache)或分布式缓存(如:Infinispan)。 8. 事务管理: Hibernate提供了事务API,如Transaction接口,...

    hibernate API帮助文档 及hibernate学习笔记

    5. **缓存机制** - 第一级缓存:Session级别的缓存,每个Session都有自己的缓存,存储了最近访问过的对象。 - 第二级缓存:SessionFactory级别的缓存,可以跨Session共享,常使用第三方缓存提供商如Ehcache。 - ...

    2017黑马程序员第一天Hibernate讲义,笔记,源码

    6. **缓存机制**:Hibernate提供了一级缓存(Session级别的)和二级缓存(SessionFactory级别的),提高了数据读取效率。 7. **对象状态**:Hibernate区分了瞬时、持久化、托管和脱管四种对象状态,理解这些状态...

    Struts2笔记+Hibernate3.6笔记+Spring3笔记

    5. **缓存机制**: 第一级缓存(Session级别的)和第二级缓存(SessionFactory级别的),提高性能。 6. **事务管理**: 提供编程和声明式事务管理,与Spring整合时通常使用声明式事务。 **Spring3笔记** Spring是...

    Hibernate学习笔记与总结

    - **缓存机制**: Hibernate支持一级缓存(Session级别)和二级缓存(SessionFactory级别),提高性能。 - **懒加载和立即加载**: 控制关联对象的加载时机,优化内存使用。 - **多态性支持**: 可以直接根据父类...

    邹波老师Hibernate教程学习笔记

    6. **缓存机制**:Hibernate的缓存分为一级缓存(Session级别)和二级缓存(SessionFactory级别),笔记会介绍它们的工作原理和优化策略,如查询缓存、集合缓存等。 7. **一对多、多对一、一对一和多对多关系映射**...

    Hibernate学习笔记

    2. **缓存机制**:Hibernate提供了第一级缓存(Session缓存)和第二级缓存(可配置的外部缓存),以提高性能。 3. **查询语言**:Hibernate Query Language (HQL) 是一种面向对象的查询语言,类似于SQL,但操作的是...

    hibernate详细笔记.

    8. **性能优化**: Hibernate 提供了缓存机制以提高性能,包括第一级缓存(Session缓存)和第二级缓存。对于1+N问题,可以使用预加载(fetch join)避免多次查询。另外,还有三级缓存的概念,包括Session级别的缓存、...

    黑马程序员_hibernate框架开发2016版讲义和笔记资料_day1_day2_day3_day4

    6.1 案例分析:结合黑马程序员的day1至day4的讲义和笔记,深入理解在实际项目中如何应用Hibernate,解决具体问题。 总结,Hibernate作为强大的ORM框架,为Java开发者提供了便利,通过理解并熟练掌握其核心概念、...

    hibernate入门学习笔记+源码

    1. **缓存机制**: 第一级缓存(Session级别的缓存)和第二级缓存(SessionFactory级别的缓存),减少数据库访问。 2. **批处理**: 批量插入、更新,提高数据库操作效率。 3. **延迟加载(Lazy Loading)**: 只在需要...

    Hibernate3.2详细教程及课程笔记

    8. **缓存机制**:Hibernate有第一级缓存(Session级别的缓存)和第二级缓存(SessionFactory级别的缓存),以及查询缓存。理解缓存原理和配置缓存策略是提高性能的关键。 9. **实体生命周期**:理解Hibernate中的...

    Java相关课程系列笔记之十四Hibernate学习笔记

    - 缓存机制:提供第一级缓存(Session级别的)和第二级缓存(SessionFactory级别的),提高性能。 - 支持懒加载和立即加载:根据需求决定何时加载关联对象。 - 异步操作:通过Future或Async支持异步数据访问。 - ...

Global site tag (gtag.js) - Google Analytics