`
huayu0815
  • 浏览: 57866 次
  • 性别: Icon_minigender_1
  • 来自: 河南
文章分类
社区版块
存档分类
最新评论

缓存简介--Cache In Hibernate: @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)

 
阅读更多

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

<wbr><wbr></wbr></wbr>

一、缓存简介 <wbr><wbr></wbr></wbr> 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. 显然后者的优势较明显 , 也比较复合当前的使用环境 . <wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr> 它可以使用不同的缓存实现,如 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 ,再加上参数,分页等信息(可以通过日志输出看到,不过它的输出不是很可读,最好改一下它的代码)。

<wbr><wbr></wbr></wbr>

<wbr><wbr></wbr></wbr>

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

<wbr><wbr></wbr></wbr>

<wbr><wbr></wbr></wbr>

二、缓存的范围

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

三、缓存的方式

有四种,分别为:

   CacheConcurrencyStrategy<wbr><wbr>.NONE</wbr></wbr>

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

   CacheConcurrencyStrategy<wbr><wbr>.READ_<span lang="EN-US"><span style="font-family:Times new roman">WRITE</span></span></wbr></wbr> ,读写模式在更新缓存的时候会把缓存里面的数据换成一个锁,其它事务如果去取相应的缓存数据,发现被锁了,直接就去数据库查询;

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

   CacheConcurrencyStrategy<wbr><wbr>.<span lang="EN-US"><span style="font-family:Times new roman">TRANSACTIONAL</span></span></wbr></wbr> 事务模式指缓存支持事务,当事务回滚时,缓存也能回滚,只支持 JTA 环境。

<wbr><wbr></wbr></wbr>

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

   @Cache(usage = CacheConcurrencyStrategy<wbr><wbr>.NONSTRICT_READ_WRITE)</wbr></wbr>

分享到:
评论

相关推荐

    HibernateAPI中文版.chm

    19.2.4. 策略:非严格读/写缓存(Strategy: nonstrict read/write) 19.2.5. 策略:事务缓存(transactional) 19.3. 管理缓存(Managing the caches) 19.4. 查询缓存(The Query Cache) 19.5. 理解集合性能...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    19.2.4. 策略:非严格读/写缓存(Strategy: nonstrict read/write) 19.2.5. 策略:事务缓存(transactional) 19.3. 管理缓存(Managing the caches) 19.4. 查询缓存(The Query Cache) 19.5. 理解集合性能...

    hibernate3.6 文档(pdf 格式)

    3.4.4. Second-level and query cache ................................................................ 43 3.4.5. Query Language Substitution ................................................................

    hibernate3.2中文文档(chm格式)

    19.2.4. 策略:非严格读/写缓存(Strategy: nonstrict read/write) 19.2.5. 策略:事务缓存(transactional) 19.3. 管理缓存(Managing the caches) 19.4. 查询缓存(The Query Cache) 19.5. 理解集合性能...

    Hibernate Reference Documentation3.1

    19.2.4. Strategy: nonstrict read/write 19.2.5. Strategy: transactional 19.3. Managing the caches 19.4. The Query Cache 19.5. Understanding Collection performance 19.5.1. Taxonomy 19.5.2. Lists, maps, ...

    Hibernate+中文文档

    19.2.4. 策略:非严格读/写缓存(Strategy: nonstrict read/write) 19.2.5. 策略:事务缓存(transactional) 19.3. 管理缓存(Managing the caches) 19.4. 查询缓存(The Query Cache) 19.5. 理解集合性能...

    Hibernate 中文 html 帮助文档

    19.2.4. 策略:非严格读/写缓存(Strategy: nonstrict read/write) 19.2.5. 策略:事务缓存(transactional) 19.3. 管理缓存(Managing the caches) 19.4. 查询缓存(The Query Cache) 19.5. 理解集合性能...

    hibernate 体系结构与配置 参考文档(html)

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

    Hibernate中文详细学习文档

    19.2.4. 策略:非严格读/写缓存(Strategy: nonstrict read/write) 19.2.5. 策略:事务缓存(transactional) 19.3. 管理缓存(Managing the caches) 19.4. 查询缓存(The Query Cache) 19.5. 理解集合性能...

    Hibernate教程

    策略:非严格读/写缓存(Strategy: nonstrict read/write) 20.2.5. 策略:事务缓存(transactional) 20.3. 管理缓存(Managing the caches) 20.4. 查询缓存(The Query Cache) 20.5. 理解集合性能...

    hibernate3.04中文文档.chm

    策略:非严格读/写缓存(Strategy: nonstrict read/write) 20.2.5. 策略:事务缓存(transactional) 20.3. 管理缓存(Managing the caches) 20.4. 查询缓存(The Query Cache) 20.5. 理解集合性能...

    最全Hibernate 参考文档

    19.2.4. 策略:非严格读/写缓存(Strategy: nonstrict read/write) 19.2.5. 策略:事务缓存(transactional) 19.3. 管理缓存(Managing the caches) 19.4. 查询缓存(The Query Cache) 19.5. 理解集合性能...

    Hibernate参考文档

    19.2.4. 策略:非严格读/写缓存(Strategy: nonstrict read/write) 19.2.5. 策略:事务缓存(transactional) 19.3. 管理缓存(Managing the caches) 19.4. 查询缓存(The Query Cache) 19.5. 理解集合性能...

    hibernate 框架详解

    二级缓存与查询缓存 4.4.5. 查询语言中的替换 4.4.6. Hibernate的统计(statistics)机制 4.5. 日志 4.6. 实现NamingStrategy 4.7. XML配置文件 4.8. J2EE应用程序服务器的集成 4.8.1. 事务策略配置 4.8.2...

    Hibernate3+中文参考文档

    19.2.4. 策略:非严格读/写缓存(Strategy: nonstrict read/write) 19.2.5. 策略:事务缓存(transactional) 19.3. 管理缓存(Managing the caches) 19.4. 查询缓存(The Query Cache) 19.5. 理解集合性能...

    django-strictmodels:自动进行值验证的模型字段实验,将向后兼容性排除在外

    from django.db import fields as nonstrict import strictmodels as strict class MyModel(models.Model): a = strict.PositiveIntegerField() b = nonstrict.PositiveIntegerField() 请注意,此模型是严格和正常...

    NHibernate中文帮组文档(2008.11月更新)

    16.2.4. 策略:非严格读/写缓存(Strategy: nonstrict read/write) 16.2.5. 并发策略兼容性 16.3. 管理缓存(Managing the caches) 16.4. 查询缓存(The Query Cache) 16.5. 理解集合性能(Understanding ...

    NHibernate参考文档 2.0.0 chm

    16.2.4. 策略:非严格读/写缓存(Strategy: nonstrict read/write) 16.2.5. 并发策略兼容性 16.3. 管理缓存(Managing the caches) 16.4. 查询缓存(The Query Cache) 16.5. 理解集合性能(Understanding ...

    dc-api-mongo:适用于dc-api-core的MongoDB驱动程序

    适用于dc-api-core MongoDB驱动程序 依存关系 安装 安装软件包npm i dc-api-mongo --save或yarn add dc-api-mongo 将dc-api-mongo添加到config.json plugins数组 ...db.mongo.nonStrict [] 没有模式的模

    Becoming Functional

    Overview of Concepts in Functional Programming 1 First-Class Functions 2 Pure Functions 2 Recursion 2 Immutable Variables 2 Nonstrict Evaluation 2 Statements 2 Pattern Matching 2 Functional ...

Global site tag (gtag.js) - Google Analytics