缓存可以简单的看成一个
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)
分享到:
相关推荐
Hibernate缓存.docHibernate缓存.doc
**一、Hibernate缓存概述** Hibernate的缓存机制主要是为了减少对数据库的直接访问,提高系统性能。它通过在内存中存储数据来加快数据访问速度,分为一级缓存和二级缓存。 **二、一级缓存** 一级缓存是...
### Hibernate缓存技术研究 #### 一、引言 Hibernate是一种强大的对象-关系映射(Object-Relational Mapping,简称ORM)工具,主要用于Java环境下的应用程序。它能够将应用程序中的对象模型映射到关系型数据库的表...
Java Hibernate缓存深入详解
Hibernate缓存主要分为一级缓存和二级缓存。一级缓存,也称为会话缓存(Session Cache),是默认启用的,由Hibernate自动管理。它存储了当前会话期间加载的所有实体对象和关联的集合对象。当会话关闭时,一级缓存中...
Hibernate缓存机制是提高应用程序性能的关键技术之一,它通过存储数据副本减少对物理数据库的访问。缓存可以分为两层:第一级缓存和第二级缓存。 **第一级缓存**是内置在Session中的,它是不可卸载的,也称为...
【Hibernate缓存深入详解】 在Java的持久化框架Hibernate中,缓存机制是提升系统性能的关键因素。它位于Hibernate应用和数据库之间,减少了对数据库的直接访问,从而提高了应用程序的运行速度。缓存中存储的是...
Hibernate 是一个流行的对象关系映射(ORM)框架,它提供了数据缓存机制以优化数据库访问性能。缓存机制分为一级缓存和二级缓存,两者都有助于减少对物理数据库的直接访问,从而提高应用程序的运行效率。 一级缓存...
关于hibernate缓存的一个ppt课件,60+幻灯片,有需要的可以看一下
### Hibernate缓存机制及优化策略 #### 一、概述 Hibernate作为一款优秀的对象关系映射(ORM)框架,在Java开发领域被广泛应用于数据库操作。它提供了丰富的缓存机制来提高应用性能并降低数据库访问压力。本文将...
Hibernate 是一个流行的对象关系映射(ORM)框架,它允许Java...通过理解Hibernate缓存和事务管理,以及如何有效地执行查询,开发者可以创建高效、健壮的Java应用程序,降低与数据库交互的复杂性,同时提升系统性能。
**一、Hibernate缓存** 1. **第一级缓存:Session缓存** - Hibernate的每个Session都有一个内置的缓存,存储了Session期间的所有持久化对象。当对实体进行CRUD操作时,数据首先被保存到这个缓存中,然后在事务提交...
**Hibernate缓存详解** 在Java开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。为了提高数据访问性能,Hibernate引入了缓存机制,它可以减少对数据库的直接访问,从而提升应用的...
本文将深入探讨Hibernate的一级缓存、二级缓存以及查询缓存,通过具体的实例来阐述它们的工作原理和使用方法。 首先,我们从一级缓存开始。一级缓存是Hibernate默认提供的缓存,它是每个Session级别的,也被称为...
描述中提到的链接可能是对Hibernate缓存机制的详细技术博客,但具体内容未给出。因此,我们将基于常规的Hibernate缓存知识进行解释。 **一、Hibernate一级缓存** 一级缓存是每个Hibernate Session内的缓存,它是一...
Hibernate缓存原理及调优策略 Hibernate缓存原理调优策略
**hibernate一级缓存详解** 在Java的持久化框架Hibernate中,一级缓存是其核心特性之一,它为提高数据库操作效率、减少对数据库的访问提供了重要支持。一级缓存,也称为session缓存,是每个Hibernate Session内部...
这篇博客文章“hibernate缓存ehcache用法”可能详细介绍了如何在Hibernate中配置和使用Ehcache。 首先,我们需要理解什么是缓存。缓存是一种存储技术,用于临时保存经常访问的数据,以减少对主存储器(如数据库)的...
**hibernate一级缓存、二级缓存和查询缓存** 在Java的持久化框架Hibernate中,缓存机制是提高应用程序性能的关键要素。缓存能够减少数据库的访问次数,提高数据读取速度,并且在一定程度上降低了系统的负载。本文将...