`
China77
  • 浏览: 7698 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Hibernate缓存机制-总结

阅读更多
缓存: 是临时存放复制数据的内存区域(Hibernate 分持久化对象和ID列表)
缓存作用:查询数据时,首先到缓存中去查找,减少数据库的SQL访问

>一级缓存,二级缓存和查询缓存都打开的情况下作查询操作时这样的:
查询普通属性,会先到查询缓存中取,如果没有,则查询数据库;
查询实体,会先到查询缓存中取id,如果有,则根据id到缓存(一级/二级)中取实体,如果缓存中取不到实体,再查询数据库

缓存实体对象:(一级缓存,二级缓存)
缓存普通属性: (查询缓存)(HQL和SQL是查询属性级别-针对条件查询的Query缓存)

二级缓存和查询缓存都相当于一个map
二级缓存的key为id,value为实体对象
查询缓存的key为sql语句及一些相关信息,value为id列表


_一级缓存很短和session的生命周期一致,一级缓存也叫session级的缓存或事务级缓存
支持一级缓存:
* get()
* load()
* iterate(查询实体对象)
如何管理一级缓存:
clear()  一级缓存中的所有持久化对象清除,释放内存资源
evit(Object obj)  将指定的持久化对象从一级缓存中清除,成为游离对象
contains(Object obj) 判断指定的对象是否存在于一级缓存中
如何避免一次性大量的实体数据入库导致内存溢出
* 先flush,再clear
如果数据量特别大,考虑采用jdbc实现

po->vo
session.save(user);  // VO经过Hibernate进行处理成PO
TUser user = (TUser)session.load(TUser.class,new Integer(1)); //返回po
session.close(); //po->vo 

如果使用TransactionAPI,在事务提交的时候,隐含就会包括这一步。否则,调用session.flush()
session.flush(); // 确保你所有的修改被持久化到数据库
session.clear();//  Hibernate占用的内存就释放掉了


_二级缓存
二级缓存也称进程级的缓存或SessionFactory级的缓存,二级缓存可以被所有的session共享
二级缓存的生命周期和SessionFactory的生命周期一致,SessionFactory可以管理二级缓存
二级缓存保存已经读出的对象在各个事务之间的Session Factory级别

Hibernate的二级缓存功能是靠缓存插件来实现的,提供org.hibernate.cache.CacheProvider接口
常用的二级缓存插件 EHCache OSCache

hibernate.cache.use_second_level_cache属性,它可以让你启用(和关闭)二级缓存
合适加载到二级缓存中:
  1.数据更新频率低 (常量基础数据)
  2.不会被并发访问
  3.共享数据

释放二级缓存
sessionFactory.evict(Class arg0, Serializable arg1) 



_一级缓存vs二级缓存
都位于持久层,区别就是缓存范围不一样
缓存的范围分为3类:
1.(事务范围)一级缓存是事务级缓存
2.(应用范围)SessionFactory级的二级缓存可以被所有的session共享
3.(集群范围) 集群环境中的每个进程间通过远程通信来保证缓存中的数据的一致(二级缓存是进程级的缓存)



_查询缓存
List()需要开启查询缓存,第二次查询这条语句时就会去根据sql语句及相关信息去key里找id列表取出一个一个load(),
接下来就和iterate一样了。List一般只有第一次发发出取实体列表的语句,以后的id列表就会去查询缓存取id列表,不会再发出sql语句。
所以,对于实体的查询,须结合二级缓存使用
所以,对象缓存超时时间不能短于查询缓存设置的超时时间
query = session.createQuery("select s.name from Student s");
//启用查询查询缓存
query.setCacheable(true);
//没有发出查询sql,因为启用了查询缓存
names = query.list();
for (Iterator iter=names.iterator();iter.hasNext(); ) {
String name = (String)iter.next();
System.out.println(name);
}
分享到:
评论

相关推荐

    hibernate-release-4.3.10.Final.zip

    总结,`hibernate-release-4.3.10.Final`版本是Hibernate框架的一个重要里程碑,其提供的强大功能和优化特性使得Java开发者在处理数据库操作时更加得心应手。理解和掌握Hibernate,能有效提升开发效率,降低系统维护...

    hibernate-release-5.0.0.Final(1).zip

    - 利用缓存机制提高数据访问速度,如一级缓存(Session级)和二级缓存(SessionFactory级)。 五、最佳实践 1. 合理设计实体类:遵循单一职责原则,避免实体类过于庞大,提高代码可维护性。 2. 选择合适的映射策略...

    hibernate-validator-5.2.4.Final.jar

    Hibernate Validator 5.2.4.Final 版本在性能上也有优化,例如缓存机制的改进,减少了重复的验证操作,提高了整体应用的运行效率。 六、API 及示例 例如,使用 @NotNull 注解来确保一个属性不为空: ```java ...

    hibernate-distribution-3.5.6-Final.rar

    这个JAR文件内部包含了对JDBC(Java Database Connectivity)的封装,使得数据库操作变得更加简单和直观,同时也提供了事务管理、缓存机制、查询语言(HQL)等高级特性。 在Hibernate 3.5.6版本中,有以下几个关键...

    hibernate-memcached-1.1.0-sources.zip

    传统的数据库缓存机制往往无法满足这样的需求,这时,分布式内存缓存系统如Memcached就显得尤为重要。本文将深入探讨如何将Hibernate与Memcached整合,以提高数据访问效率,并基于`hibernate-memcached-1.1.0-...

    hibernate-orm-3.3源码

    为了提高性能,Hibernate 提供了二级缓存机制。它允许在 SessionFactory 级别共享对象,减少对数据库的访问。常用的二级缓存提供商有 EhCache 和 Infinispan。 六、懒加载与代理 Hibernate 支持懒加载(Lazy ...

    hibernate-release-5.2.3.Final

    8. Hibernate缓存: Hibernate支持二级缓存,包括一级缓存(Session级别的缓存)和二级缓存(SessionFactory级别的缓存)。如使用EhCache作为二级缓存,可以显著提升系统性能。 9. 异构数据库支持: Hibernate...

    hibernate-release-4.3.0.Beta2 lib

    Hibernate 是一个开源的 ORM 框架,它提供了一种规则化的映射机制,将 Java 类与数据库表进行对应,从而避免了繁琐的 SQL 代码编写。Hibernate 4.3.0 Beta2 是该框架的一个重要版本,引入了许多新特性和改进,提高...

    hibernate-annotations-3.4.0.GA+hibernate-distribution-3.3.2.GA-dist

    2. 性能优化:通过改进缓存机制和查询执行效率,提升了整体性能。 3. 更好的类型安全:引入了TypeSafe HQL,使得HQL查询更加健壮,减少了运行时错误。 二、Hibernate Annotations 3.4.0详解 Hibernate Annotations...

    hibernate-release-4.2.12.Final libs

    - 缓存机制:通过集成Ehcache等缓存库,提高数据访问效率,减少数据库负载。 - 事务管理:Hibernate支持JTA和JDBC事务管理,确保数据一致性。 - 分布式应用:与Spring框架结合,实现依赖注入,便于在大型项目中...

    hibernate-release-4.3.0.Beta2

    5. 第二级缓存:提高系统性能,通过缓存机制减少对数据库的访问。 四、4.3.0.Beta2版本特性 1. JPA 2.1支持:在4.3.0版本中,Hibernate对Java Persistence API 2.1标准提供了全面支持,增加了新特性和改进。 2. ...

    hibernate-release-4.2.3.lib.zip

    五、缓存机制 Hibernate 4.2.3版本支持二级缓存,通过配置CacheProvider和查询缓存,提高数据访问速度。一级缓存是Session级别的,每个Session都有自己的缓存;二级缓存则全局共享,可跨Session使用。 六、懒加载...

    hibernate-release-5.0.11.Final

    总结,`hibernate-release-5.0.11.Final`包含的示例可以帮助开发者深入了解Hibernate的使用,从配置到实践,从基本操作到高级特性,逐步掌握这一强大的ORM框架。通过学习和实践,开发者能够更好地利用Hibernate来...

    hibernate-release-5.2.10

    3. Session:数据库会话,用于执行数据库操作,提供了事务管理和缓存机制。 4. Transaction:事务管理,确保数据的一致性和完整性。 5. Query和Criteria API:提供查询数据的方法,包括HQL(Hibernate Query ...

    hibernate-release-4.2.3

    3. 第二级缓存:4.2.3版本强化了缓存机制,支持查询缓存和实体缓存,提升了应用的响应速度。 4. 支持JPA:Hibernate既是独立的ORM框架,也是Java Persistence API(JPA)的参考实现,提供了对标准JPA规范的全面支持...

    hibernate-release-4.2.2.Final.zip

    为了提高性能,Hibernate引入了缓存机制。一级缓存是Session级别的,所有在Session内的操作都会被缓存,直到事务提交。二级缓存则可配置为全局共享,可跨Session访问,通常由第三方缓存实现如Ehcache提供。 六、...

    Hibernate hibernate-core-1a8aca9.ta

    总结,`hibernate-core-1a8aca9.ta`是Hibernate的核心组件,包含了ORM框架的关键功能。通过深入研究和实践,开发者可以充分利用Hibernate简化数据库操作,提高开发效率,同时提升应用的灵活性和可扩展性。

    hibernate-release-4.3.8.Final

    四、缓存机制 Hibernate 4.3.8.Final引入了第二级缓存,它可以跨会话存储数据,提高应用性能。同时,Hibernate还支持查询缓存,将查询结果缓存起来,避免重复执行SQL。 五、事务处理 Hibernate提供了基于JTA(Java ...

    hibernate-release-4.3.5.Final jar包

    5. Cache:缓存机制,提升数据访问速度,包括一级缓存(Session级别的)和二级缓存(SessionFactory级别的)。 四、配置与使用 在项目中使用Hibernate 4.3.5.Final,需要配置hibernate.cfg.xml文件,指定数据库连接...

    hibernate-annotations-3.4.0.GA

    6. **缓存机制** Hibernate提供了一级缓存(Session级别的)和二级缓存(SessionFactory级别的)。通过`@Cacheable`和`@Cache`注解可以配置实体的缓存策略,提高性能。 7. **转换器和类型** Hibernate支持自定义...

Global site tag (gtag.js) - Google Analytics