Hibernate使用Ehcache实心二级缓存

来源:互联网 发布:mac圣诞限量套装 编辑:程序博客网 时间:2024/04/29 21:18
Ehcache介绍
 Ehcache是一个快速的、轻量级Java应用缓存。Hibernate中就支持了Ehcache。
 
 
 
Hibernate与Ehcache集成
要完成Hibernate与Ehcache的集成,只需要按照下面几步操作即可完成。
 
1、下载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>
 
0 0
原创粉丝点击