`

缓存简介--Cache In Hibernate

 
阅读更多

缓存可以简单的看成一个 Map 通过 key 在缓存里面 value

 

一、缓存简介   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)

转载地址:http://blog.csdn.net/huayu0815/article/details/6860596

分享到:
评论

相关推荐

    hibernate4.0使用二级缓存jar包

    &lt;property name="hibernate.cache.region.factory_class"&gt;org.hibernate.cache.ehcache.EhCacheRegionFactory 3.3配置如下: &lt;property name="hibernate.cache.use_second_level_cache"&gt;true &lt;property name="cache...

    day37 05-HIbernate二级缓存:一级缓存更新同步到二级缓存及二级缓存配置文件

    &lt;hibernate-configuration&gt; &lt;session-factory&gt; &lt;!-- 配置缓存插件 --&gt; &lt;property name="hibernate.cache.region.factory_class"&gt;org.hibernate.cache.ehcache.EhCacheRegionFactory &lt;!-- 开启查询缓存 --&gt; ...

    grails-redis-hibernate-cache:Grails 与 Redis 的集成作为 Hibernate 二级缓存的后端

    compile " :redis-hibernate-cache:1.0 " 还有这个存储库到存储库列表: repositories { .. . mavenRepo " http://dl.bintray.com/debop/maven " } 这是下载一些不在主要 maven 存储库中的依赖项所必需的。 在...

    hibernate-memcached包

    **hibernate-memcached包** 是一个专为Hibernate框架设计的扩展,目的是将流行的分布式内存缓存系统Memcached整合到Hibernate中,作为其二级缓存解决方案。在大型分布式应用中,缓存技术是提高性能的关键,特别是...

    hibernate--4.使用hibernate的缓存-1

    本节我们将深入探讨“Hibernate的缓存”这一主题,这是提高应用程序性能的关键技术。 首先,理解缓存的概念至关重要。缓存是一种存储技术,用于暂时保存最近使用或频繁使用的数据,以便快速访问。在Hibernate中,...

    springboot+jpa(hibernate配置redis为二级缓存) springboot2.1.4

    &lt;artifactId&gt;hibernate-ehcache &lt;groupId&gt;org.redisson &lt;artifactId&gt;redisson &lt;version&gt;3.x.x&lt;/version&gt; &lt;!-- 使用对应版本 --&gt; ``` 2. **配置Redisson**: 在`application.yml`或`application....

    Hibernate缓存技术研究

    ### Hibernate缓存技术研究 #### 一、引言 Hibernate是一种强大的对象-关系映射(Object-Relational Mapping,简称ORM)工具,主要用于Java环境下的应用程序。它能够将应用程序中的对象模型映射到关系型数据库的表...

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

    本次我们将深入探讨的版本是`hibernate-release-5.0.0.Final(1)`,这个版本在Hibernate的生命周期中具有重要的地位,它引入了多项新特性和改进,旨在提升开发效率和性能。 一、Hibernate概述 Hibernate是Java领域中...

    hibernate-memcached-1.1.0-sources.zip

    `hibernate-memcached-1.1.0-sources.zip`提供的源码实现了一个Hibernate二级缓存提供者,它将Hibernate的查询结果缓存在Memcached中,当再次进行相同查询时,可以直接从缓存中获取数据,避免了重复的数据库查询。...

    hibernate-extensions-2.1.3.zip ,middlegen for hibernate

    - Cache管理:提供更细粒度的缓存控制,包括第二级缓存和查询缓存的优化。 - Batch处理:支持批量插入、更新和删除操作,提高大数据量操作的性能。 - Event监听器:允许在特定的持久化操作前后执行自定义逻辑,如...

    hibernate cache

    - **启用**:需通过 `hibernate.cache.use_query_cache` 配置,并确保第二级缓存已启用。 - **安全性**:注意,查询缓存不保证数据一致性,因为它可能在数据库更新后返回旧数据。 - **依赖性**:查询缓存依赖于实体...

    第29讲--为Spring集成的Hibernate配置二级缓存

    &lt;artifactId&gt;hibernate-ehcache 你的hibernate版本号 ``` 然后,我们需要在Hibernate的配置文件(如hibernate.cfg.xml)中启用二级缓存,并指定使用的缓存插件: ```xml &lt;property name="hibernate.cache.use_...

    Hibernate-annotations-3.4最新版本

    在实际应用中,Hibernate-annotations-3.4.0.GA还包含了事务管理、缓存机制等功能。@Transactional注解可以标记一个方法为事务边界,而Hibernate的二级缓存通过@Cacheable和@Cache配置,可以提高查询性能,降低...

    Hibernate 2nd-level cache: JBoss Caching 配置与注意事项

    其中,第二级缓存(2nd-level cache)是Hibernate性能优化的重要手段之一,它可以提升数据读取速度,减少对数据库的直接访问。本篇文章将深入探讨Hibernate中的第二级缓存,并以JBoss Caching为例,讲解配置和使用...

    hibernate缓存ehcache用法

    这篇博客文章“hibernate缓存ehcache用法”可能详细介绍了如何在Hibernate中配置和使用Ehcache。 首先,我们需要理解什么是缓存。缓存是一种存储技术,用于临时保存经常访问的数据,以减少对主存储器(如数据库)的...

    缓存框架-Ehcache学习笔记

    - **缓存扩展**: Ehcache 可以与其他缓存解决方案集成,如 Hibernate 的二级缓存。 ### 5. Ehcache 源码分析 深入学习 Ehcache 源码有助于理解其工作原理。主要关注以下几个关键类: - **Cache**: 实现缓存逻辑的...

    hibernate-redis-2.3.2.jar和redisson-2.5.1.jar

    hibernate-redis-2.3.2.jar和redisson-2.5.1.jar是两个在Java开发中用于整合Hibernate ORM框架与Redis分布式缓存的库。它们为开发者提供了在Hibernate4.0及以上版本中利用Redis进行数据缓存的能力,以提升应用程序的...

    Hibernate的cache缓存解析

    ### Hibernate的Cache缓存解析 #### 基本的缓存原理 在深入探讨Hibernate缓存之前,我们先来了解一下缓存的基本原理。缓存是一种用于提高数据访问速度的技术,通常用于存储最近或频繁访问的数据副本。通过将这些...

    hibernate-annotations-3.4.0.GA.rar

    - `@Cache`: 配置缓存区域和策略,如READ_ONLY、NONSTRICT_READ_WRITE、TRANSACTIONAL。 以上只是Hibernate注解3.4.0.GA版中部分关键知识点的概述,实际应用中,开发者还需要根据项目需求灵活运用,并结合 ...

Global site tag (gtag.js) - Google Analytics