Hibernate Cache :使用Ehcache作为Hibernate的二级缓存的配置说明

Ehcache介绍

Ehcache是一个快速的、轻量级Java应用缓存。Hibernate中就支持了Ehcache。

http://ehcache.org/documentation/integrations/hibernate

Hibernate与Ehcache集成

要完成Hibernate与Ehcache的集成,只需要按照下面几步操作即可完成。

1、下载Ehcache-core 包

可以在浏览器上输入网址:http://sourceforge.net/projects/ehcache/files/ehcache-core/ 选择相应版本下载。

也可以使用Maven依赖:

<dependency>
      <groupId>net.sf.ehcache</groupId>
      <artifactId>ehcache-core</artifactId>
      <version>2.6.9</version>
</dependency>

2、添加Hibernate-Ehcache包

因为要与Hibernate匹配使用,所以要根据Hibernate的版本来下载Ehcache插件包。

<dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-ehcache</artifactId>
      <version>${hibernate-version}</version>
</dependency>

3、在hibernate.cfg.xml中配置Ehcache作为二级缓存

Ehcache是作为Hibernate中的二级缓存使用的。

对于Hibernate3.3以上的版本:

也可以使用:

<property name=”hibernate.cache.provider_class”>org.hibernate.cache.EhCacheProvider</property>

对于Hibernate 4.X版本:

因为Hibernate4.x版本将Hibernate-Ehcache.jar集成到Hibernate-core.jar中了。所以上面的配置有所改变:

也可以使用:

<property name=”hibernate.cache.provider_class”>org.hibernate.cache.EhCacheProvider</property>

4、开启二级缓存或者查询缓存

<!--二级缓存-->
<property name="hibernate.cache.use_second_level_cache">true</property>
<!--查询缓存-->
<property name="hibernate.cache.use_query_cache">true</property>

5、在ehcache.xml配置中配置多个缓存

如果我们项目中,没有配置ehcache.xml,就会使用默认的配置文件:ehcache-failsafe.xml,这个文件可以在Ehcache-core.jar中找到。

一个mapper中,可以配置各种缓存策略。既可以为实体配置缓存,也可以为实体中的集合配置缓存,当然还可以为查询配置缓存。

为了展示这三种缓存配置方式,把他们都放到一个文件中。上面只是展示了有这三种Cache配置方式。接下来,就对这三种缓存配置方式分别看看ehcache是如何配置的。

Ehcache.xml中有两种常用的元素:<diskStore>、 <cache>

<diskStore path="java.io.tmpdir"/>

用于配置使用磁盘存储时磁盘的位置。

<Cache>配置说明

在了解ehcache配置之前,先来了解一下ehcache的各项属性

必要的属性:

name :是cache的名字,在ehcache.xml文件中是唯一的。命名约束根据三种级别的缓存是不同的。

maxElementsInMemory: 在内存中对象的最大数目。

maxElementsOnDisk: 在磁盘中存储的对象的最大数目。

eternal:永久的。如果设置永久的,就会忽略掉 对象缓存时间的限制。

overflowToDisk: 设置在内存中对象的数目超出最大值时,是否存储到磁盘上。

可选的属性:

timeToIdleSeconds: 设置在对象过期前的空闲时间。默认值是0

timeToLiveSeconds: 设置在对象过期前的存活时间。默认值是0

diskPersistent: 设置当JVM重启时,是否在磁盘上持久化对象。

diskSpoolBufferSizeMB: 设置磁盘上缓冲区大小。

memoryStoreEvictionPolicy: 设置内存达到maxElementsInMemory时的清除策略。默认策略是LRU(最近最少使用),也有其他的策略,如:FIFO(先进先出策略),LFU(最少使用策略)。

接下来,就分别说说这三种级别的缓存。

三种级别的<cache>的name属性设置

1)实体级别的缓存

实体级别的缓存,ehcache.xml中<cache>元素的name属性的命名方式是:类的全名。例如项目中有个类:com.fjn.other.hibernateCache.entity.Event

那么应配置为:

<cache name=” com.fjn.other.hibernateCache.entity.Event”
其他属性
/>
2)集合级别缓存

这里说的集合级别的缓存,其实是实体中某个属性是一个集合。例如:

public calss Customer{
    private String name;
    private List<Address> adds;
}

这样一个类,如果是对Customer的属性adds使用缓存,也就是使用了集合级别的缓存,它的mapper文件中应该会是像这样的配置:

<list name="adds">
    <cache usage="read-only"/>
</list>

这种情况下,我们就可以在ehcache.xml中做如下配置:

<cache name=” com.fjn.other.hibernateCache.entity.Customer.adds”
 其他属性
/>
3)查询级别的缓存

这个其实,就是前一节中学习到的Query Cache。

使用Query Cache时,可以设置name,也可以不设置name。如果不设置name,那么默认的name是:org.hibernate.cache.StandardQueryCache,或者是org.hibernate.cache.UpdateTimestampsCache。

这个在自己测试时,使用Debug就可以看得到。

上面是不指定名字是默认的值。如果自己指定了name呢?

如果要自己指定查询缓存的name属性,一般使用query.YourCacheName 。也就是一般会使用query.开头。

在程序中如此使用:

Query query=session.createQuery(hql);
query.setCacheable(true);
query.setCacheRegion(“query.YourCacheName”);

6、在hibernate.cfg.xml中配置ehcache.xml的配置文件的位置

在hibernate.cfg.xml中配置ehcache.xml的位置,例如:

<property name="cache.provider_configuration_file_resource_path">config/hibernate/ehcache/ehcache.xml</property>
时间: 2024-11-11 03:05:30

Hibernate Cache :使用Ehcache作为Hibernate的二级缓存的配置说明的相关文章

使用Spring提供的缓存抽象机制整合EHCache为项目提供二级缓存

Spring自身并没有实现缓存解决方案,但是对缓存管理功能提供了声明式的支持,能够与多种流行的缓存实现进行集成. Spring Cache是作用在方法上的(不能理解为只注解在方法上),其核心思想是:当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个键值存放在缓存中,等到下次利用同样的参数调用该方法时将不再执行该方法,而是直接从缓存中获取结果进行返回.所以在使用Spring Cache的时候我们要保证我们的缓存的方法对于相同的方法参数要有相同的返回结果. 1.适合和不适合保存到二级缓存的数

Hibernate 二级缓存 总结整理(转)

和<Hibernate 关系映射 收集.总结整理> 一样,本篇文章也是我很早之前收集.总结整理的,在此也发上来 希望对大家有用.因为是很早之前写的,不当之处请指正. 1.缓存:缓存是什么,解决什么问题? 位于速度相差较大的两种硬件/软件之间的,用于协调两者数据传输速度差异的结构,均可称之为 Cache(摘自Robbin的<缓存技术浅谈>).目的:让数据更接近于应用程序,协调速度不匹配,使访问速度更快.(请参考http://baike.baidu.com/view/907.htm 了

Spring 整合 Hibernate 时启用二级缓存实例详解

写在前面: 1. 本例使用 Hibernate3 + Spring3: 2. 本例的查询使用了 HibernateTemplate: 1. 导入 ehcache-x.x.x.jar 包: 2. 在 applicationContext.xml 文件中找到 sessionFactory 相应的配置信息并在设置 hibernateProperties 中添加如下代码: ? 1 2 3 4 5 6 <!-- 配置使用查询缓存 --> <prop key="hibernate.cach

Hibernate4.1.4配置二级缓存EHCache步骤

1.当然首先引入EHCache相关的jar包 这些包不需要另外下载,在Hibernate官方网站下载Hibernate4.1.7的压缩包(如:hibernate-release-4.1.7.Final.zip)解压,引入hibernate-release-4.1.7.Final\hibernate-release-4.1.7.Final\lib\optional\ehcache目录下的ehcache-core-2.4.3.jar.hibernate-ehcache-4.1.4.Final.jar

二级缓存(转载)

缓存的作用主要是用来提高hibernate的性能,可以简单的理解成一个map.使用缓存涉及到三个操作:把数据放入缓存.从缓存中取数据.删除缓存中的无效数据. 一.一级缓存 一级缓存是Session级共享的.对于一级缓存而言,所有经过Session操作的实体,不管是使用save().upadate()或者saveOrUpdate保存一个对象,还是使用load().get().list().iterate().scroll()方法获得一个对象时,该对象都将被放入一级缓存中. [java] view

二级缓存和配置原理

二级缓存是进程或集群范围内的缓存,可以被所有的Session共享 二级缓存是可配置的插件 01.二级缓存的配置使用(ehcache缓存) *1.引入如下jar包. ehcache-1.2.3.jar  核心库 backport-util-concurrent.jar commons-logging.jar *2.配置Hibernate.cfg.xml开启二级缓存 <property name="hibernate.cache.use_second_level_cache">

二级缓存配置和原理

二级缓存是进程或集群范围内的缓存,可以被所有的Session共享 二级缓存是可配置的插件 01.二级缓存的配置使用(ehcache缓存) *1.引入如下jar包. ehcache-1.2.3.jar  核心库 backport-util-concurrent.jar commons-logging.jar *2.配置Hibernate.cfg.xml开启二级缓存 <property name="hibernate.cache.use_second_level_cache">

Hibernate二级缓存以及ehcache的搭建配置

前言 这次主要复习Hibernate的二级缓存的相关知识,配置以及使用.二级缓存主要采用第三方的ehcache,也将介绍ehcache缓存的相关配置属性以及在项目中的搭建,具体的项目查看下一篇的 Maven搭建SpringMVC+Hibernate项目详解 的文章.(之前使用过Hibernate的二级缓存,但是没自己搭建和研究过,现在花了半天时间搭建了一下,写下来供大家参考) 1.Hibernate二级缓存 Hibernate包括两个级别的缓存: 1.一级缓存:默认总是启用的session级别的

[原创]java WEB学习笔记93:Hibernate学习之路---Hibernate 缓存介绍,缓存级别,使用二级缓存的情况,二级缓存的架构集合缓存,二级缓存的并发策略,实现步骤,集合缓存,查询缓存,时间戳缓存

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------