`

Cache in Hibernate

阅读更多



一、缓存简介   Cache In Hibernate
HIBERNATE 中的 CACHE 有两级 .

一级是在 Session 范围内的 CACHE . 即每个 Session 有自己的一个 CACHE, 当前操作的对象都会被保留在 CACHE 中 . 但是 Session 关闭后这个 CACHE 也就没有 . 可见这级 CACHE 的生命期是很短的 . (使用 id 进行关键字存储:缓存的 key 就是 ID , value 是 POJO ) ( 缓存的是实体对象 )

另一级 CACHE 是在 SessionFactory 范围的 , 可以被来自同一个 SessionFactory 的 Session 共享 . 在 HIBERNATE 的文档中称其为 SECOND LEVEL CACHE. 显然后者的优势较明显 , 也比较复合当前的使用环境 .    它可以使用不同的缓存实现,如 EhCache 、 JBossCache 、 OsCache 等 (二级缓存是缓存实体对象的)



还有一个类型的 CACHE 就是 QueryCache . 它的作用就是缓存一个 Query 以及 Query 返回对象的 Identifier 以及对象的类型 . 有了 QueryCache 后就可以高效的使用 SECOND LEVEL CACHE.

hibernate 查询缓存 (hibernate 默认是关闭的 )
查询缓存是针对普通属性结果集的缓存
对实体对象的结果集只缓存 id
查询缓存的生命周期,当前关联的表发生修改,那么查询缓存生命周期结束
查询缓存的配置和使用:
1. 启用查询缓存:在 hibernate .cfg.xml 中加入:
<property name=”hibernate .cache.use_query_cache”>true</property>
2. 在程序中必须手动启用查询缓存,如: query.setCacheable(true);

QueryCache 用来缓存查询语句 , 及查询结果集中对象的 Identifier 与 Type. 当再次使用已缓存的 Query 时 , 就可以通过对象的 Identifier 与 Type 在 SECOND LEVEL CACHE 中查找实际的对象 .

对于查询缓存来说,缓存的 key 是根据 hql 生成的 sql ,再加上参数,分页等信息(可以通过日志输出看到,不过它的输出不是很可读,最好改一下它的代码)。





注:一级缓存也叫 session 级的缓存或事务缓存。 Hibernate 二级缓存也称为进程级的缓存或 SessionFactory 级的缓存。二级缓存是全局缓存,它可以被所有的 session 共享。二级缓存的生命周期和 SessionFactory 的生命周期一致, SessionFactory 可以管理二级缓存。





二、缓存的范围

缓存的范围分为 3 类 :
1. 事务范围
      事务范围的缓存只能被当前事务访问 , 每个事务都有各自的缓存 , 缓存内的数据通常采用相互关联的对象形式 . 缓存的生命周期依赖于事务的生命周期 , 只有当事务结束时 , 缓存的生命周期才会结束 . 事务范围的缓存使用内存作为存储介质 , 一级缓存就属于事务范围 .
2. 应用范围
      应用程序的缓存可以被应用范围内的所有事务共享访问 . 缓存的生命周期依赖于应用的生命周期 , 只有当应用结束时 , 缓存的生命周期才会结束 . 应用范围的缓存可以使用内存或硬盘作为存储介质 , 二级缓存就属于应用范围 .
3. 集群范围
      在集群环境中 , 缓存被一个机器或多个机器的进程共享 , 缓存中的数据被复制到集群环境中的每个进程节点 , 进程间通过远程通信来保证缓存中的数据的一致 , 缓存中的数据通常采用对象的松散数据形式 .



三、缓存的方式

有四种,分别为:

   CacheConcurrencyStrategy.NONE

   CacheConcurrencyStrategy.READ_ONLY ,只读模式,在此模式下,如果对数据进行更新操作,会有异常;

   CacheConcurrencyStrategy.READ_WRITE ,读写模式在更新缓存的时候会把缓存里面的数据换成一个锁,其它事务如果去取相应的缓存数据,发现被锁了,直接就去数据库查询;

   CacheConcurrencyStrategy.NONSTRICT_READ_WRITE ,不严格的读写模式则不会的缓存数据加锁;

   CacheConcurrencyStrategy.TRANSACTIONAL ,事务模式指缓存支持事务,当事务回滚时,缓存也能回滚,只支持 JTA 环境。



缓存的注释写法如下,加在 Entity 的 java 类上:

   @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)

 

分享到:
评论

相关推荐

    hibernate.properties

    #hibernate.dialect org.hibernate.dialect.Cache71Dialect #hibernate.connection.driver_class com.intersys.jdbc.CacheDriver #hibernate.connection.username _SYSTEM #hibernate.connection.password SYS #...

    Hibernate in Action

    《Hibernate in Action》是一本深度探讨Java持久化框架Hibernate的专业书籍。Hibernate作为Java领域最流行的ORM(对象关系映射)工具之一,它极大地简化了数据库操作,使得开发者能够以面向对象的方式处理数据。这...

    Hibernate开发指南.pdf

    #### 十六、Hibernate in Spring - **Spring框架与Hibernate的整合**: Spring提供了一种简单的机制来管理和配置Hibernate。 - **优点**: - 事务管理统一。 - 自动化Bean装配。 - 方便的异常转换。 #### 十七、...

    hibernate_reference.pdf

    - **Second-Level and Query Cache**: Describes how to enable and configure Hibernate's second-level cache and query cache for improved performance. - **Query Language Substitution**: Explains how to ...

    Hibernate实战第2版.zip

    这本书的第二版,作为"In Action"系列的经典之作,旨在帮助开发者更高效地理解和运用Hibernate技术。 本书的知识点涵盖了以下几个主要部分: 1. Hibernate基础:介绍Hibernate的基本概念,包括ORM思想、项目配置、...

    hibernate in action

    10. **Second-Level Cache**:讨论Hibernate的二级缓存机制,提高数据访问性能。 11. **Hibernate与Web应用集成**:讲解如何在Servlet、JSP、Spring MVC等Web框架中集成Hibernate,以及如何处理异常。 12. **性能...

    Hibernate开发指南

    - **文档说明**: 文档版本为1.0,由夏昕撰写,主要修订内容包括错误修正及添加了“Hibernate in Spring”的相关内容。文档强调了其开源性质,并鼓励读者提出改进建议。 - **目录概览**: - **准备工作**: 包括环境...

    cache/ehcache缓存使用

    System.out.println("Object not found in cache."); } // 关闭CacheManager cacheManager.shutdown(); } } class MyObject { // ... } ``` 在上述代码中,我们首先通过`CacheManager.create()`创建了一个...

    HIBERNATE4开发文档,HIBERNATE4的变化

    - Hibernate4中,如果你在进行分页查询时遇到“ResultSet may only be accessed in a forward direction”的错误,这是因为结果集默认只能向前滚动。为了解决此问题,可以在Hibernate配置中设置`jdbc.use_...

    Hibernate性能优化:一级缓存

    本文将深入探讨Hibernate性能优化中的一个重要概念——一级缓存,并结合给出的压缩包文件“hibernate_cache_level1”,来详细解析一级缓存的工作原理及其优化策略。 一级缓存是Hibernate内置的一种缓存机制,它存在...

    hibernate-release-5.0.7.Final.zip官方

    &lt;property name="hibernate.cache.region.factory_class"&gt;org.hibernate.cache.ehcache.EhCacheRegionFactory &lt;property name="hibernate.cache.use_second_level_cache"&gt;true &lt;property name="hibernate.cache.use_...

    用Maven+Eclipse Neon配置Hibernate5例子

    &lt;property name="cache.provider_class"&gt;org.hibernate.cache.NoCacheProvider &lt;!-- Echo all executed SQL to stdout --&gt; &lt;property name="show_sql"&gt;true &lt;!-- Mapping files --&gt; &lt;/hibernate-...

    夏昕-Hibernate+开发指南.pdf

    - **Hibernate in Spring**:Spring框架可以方便地管理Hibernate Session的生命周期,并与其他Spring组件协同工作。 #### 四、总结 本文档不仅是一份Hibernate的学习指南,也是作者多年实战经验的总结。通过阅读这...

    Java框架hibernate基础教程,简单上手。

    &lt;property name="cache.provider_class"&gt;org.hibernate.cache.NoCacheProvider &lt;!-- Echo all executed SQL to stdout --&gt; &lt;property name="show_sql"&gt;true &lt;!-- Mapping files --&gt; &lt;/hibernate-...

    Hibernate开发指南(原版书)

    - **Hibernate in Spring**:介绍如何将Hibernate集成到Spring框架中,利用Spring的依赖注入和事务管理特性,简化Hibernate的配置和使用,提高开发效率和代码的可维护性。 《Hibernate开发指南》一书不仅提供了理论...

    hibernate支持access

    &lt;property name="cache.provider_class"&gt;org.hibernate.cache.NoCacheProvider &lt;!-- Echo all executed SQL to stdout --&gt; &lt;property name="show_sql"&gt;true &lt;!-- Drop and re-create the database schema on ...

    Hibernate 开发指南

    #### 十四、Hibernate in Spring Spring 框架可以很好地与 Hibernate 集成,Spring 提供了多种方式来管理 Hibernate 的 `SessionFactory` 和 `Session`,使得开发更加便捷。 #### 结语 本指南覆盖了 Hibernate 的...

Global site tag (gtag.js) - Google Analytics