缓存可以简单的看成一个
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>
相关推荐
19.2.4. 策略:非严格读/写缓存(Strategy: nonstrict read/write) 19.2.5. 策略:事务缓存(transactional) 19.3. 管理缓存(Managing the caches) 19.4. 查询缓存(The Query Cache) 19.5. 理解集合性能...
19.2.4. 策略:非严格读/写缓存(Strategy: nonstrict read/write) 19.2.5. 策略:事务缓存(transactional) 19.3. 管理缓存(Managing the caches) 19.4. 查询缓存(The Query Cache) 19.5. 理解集合性能...
3.4.4. Second-level and query cache ................................................................ 43 3.4.5. Query Language Substitution ................................................................
19.2.4. 策略:非严格读/写缓存(Strategy: nonstrict read/write) 19.2.5. 策略:事务缓存(transactional) 19.3. 管理缓存(Managing the caches) 19.4. 查询缓存(The Query Cache) 19.5. 理解集合性能...
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, ...
19.2.4. 策略:非严格读/写缓存(Strategy: nonstrict read/write) 19.2.5. 策略:事务缓存(transactional) 19.3. 管理缓存(Managing the caches) 19.4. 查询缓存(The Query Cache) 19.5. 理解集合性能...
19.2.4. 策略:非严格读/写缓存(Strategy: nonstrict read/write) 19.2.5. 策略:事务缓存(transactional) 19.3. 管理缓存(Managing the caches) 19.4. 查询缓存(The Query Cache) 19.5. 理解集合性能...
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. 第...
19.2.4. 策略:非严格读/写缓存(Strategy: nonstrict read/write) 19.2.5. 策略:事务缓存(transactional) 19.3. 管理缓存(Managing the caches) 19.4. 查询缓存(The Query Cache) 19.5. 理解集合性能...
策略:非严格读/写缓存(Strategy: nonstrict read/write) 20.2.5. 策略:事务缓存(transactional) 20.3. 管理缓存(Managing the caches) 20.4. 查询缓存(The Query Cache) 20.5. 理解集合性能...
策略:非严格读/写缓存(Strategy: nonstrict read/write) 20.2.5. 策略:事务缓存(transactional) 20.3. 管理缓存(Managing the caches) 20.4. 查询缓存(The Query Cache) 20.5. 理解集合性能...
19.2.4. 策略:非严格读/写缓存(Strategy: nonstrict read/write) 19.2.5. 策略:事务缓存(transactional) 19.3. 管理缓存(Managing the caches) 19.4. 查询缓存(The Query Cache) 19.5. 理解集合性能...
19.2.4. 策略:非严格读/写缓存(Strategy: nonstrict read/write) 19.2.5. 策略:事务缓存(transactional) 19.3. 管理缓存(Managing the caches) 19.4. 查询缓存(The Query Cache) 19.5. 理解集合性能...
二级缓存与查询缓存 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...
19.2.4. 策略:非严格读/写缓存(Strategy: nonstrict read/write) 19.2.5. 策略:事务缓存(transactional) 19.3. 管理缓存(Managing the caches) 19.4. 查询缓存(The Query Cache) 19.5. 理解集合性能...
from django.db import fields as nonstrict import strictmodels as strict class MyModel(models.Model): a = strict.PositiveIntegerField() b = nonstrict.PositiveIntegerField() 请注意,此模型是严格和正常...
16.2.4. 策略:非严格读/写缓存(Strategy: nonstrict read/write) 16.2.5. 并发策略兼容性 16.3. 管理缓存(Managing the caches) 16.4. 查询缓存(The Query Cache) 16.5. 理解集合性能(Understanding ...
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-core MongoDB驱动程序 依存关系 安装 安装软件包npm i dc-api-mongo --save或yarn add dc-api-mongo 将dc-api-mongo添加到config.json plugins数组 ...db.mongo.nonStrict [] 没有模式的模
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 ...