您的位置:首页 > 其它

Ehcache的简单使用

2015-11-30 00:00 239 查看
摘要: Hibernate3.3通过Ehcache实现启用二级缓存技术

前段时间公司的新项目要求使用Hibernate二级缓存,近期通过在网上也看了不少帖子。

ehcache是一个非常轻量级的框架,1.2以后就支持了集群,并且是Hibernate默认的缓存provider.

主要特性
1. 快速.
2. 简单.
3. 多种缓存策略
4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题
5. 缓存数据会在虚拟机重启的过程中写入磁盘
6. 可以通过RMI、可插入API等方式进行分布式缓存
7. 具有缓存和缓存管理器的侦听接口
8. 支持多缓存管理器实例,以及一个实例的多个缓存区域
9. 提供Hibernate的缓存实现
10. 等等

下面是我的一些使用心得。

既然是hibernate二级缓存 首先当然要配置Hibernate了,我使用的是Hibernate3.3。

然后在src目录下创建ehcache.xml文件

ehcache.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
<!-- 设置磁盘缓存路径 -->
<diskStore path="d:/diskStore/"></diskStore>
<!-- 默认配置,所有的类都遵循这个配置 -->
<defaultCache
maxElementsInMemory="100000"
eternal="false"
timeToIdleSeconds="25"
timeToLiveSeconds="25"
overflowToDisk="true"

/>
<!-- 为某各类单独配置 -->
<cache
name="com.example.entity.Students"
maxElementsInMemory="100"
enternal="false"
timeToIdleSeconds="10000"
timeToLiveSeconds="10000"
memoryStoreEvictionPolicy="LRU"
overflowToDisk="true"/>

</ehcache>

maxElementsInMemory:设置缓存中可以存放多少个对象。

eternal:设置缓存是否过期 值为true时则缓存永不过期,一旦设置了,那么timeToIdleSeconds和timeToLiveSeconds将失效

timeToIdleSeconds: 设置一个对象被访问后多少秒没有被再次访问就失效。0为无穷大

timeToLiveSeconds: 设置对象在创建以后多少秒没有被访问就失效。0为无穷大。

overflowToDisk:设置当缓存对象超过设置最大值时是否存入磁盘中。

memoryStoreEvictionPolicy:当缓存中对象超过maxElementsInMemory所设置的值后,ehcache将会根据指定的策略去清理内存,默认清理策略为 LRU (最少使用)。也可以设置为FIFO(先进先出)策略。

maxElementsOnDisk : 设置缓存对象在磁盘中的最大数量,0表示无限制。仅在overflowToDisk设置为true时有效。

diskSpoolBufferSizeMB: 设置磁盘缓存区的大小MB为单位。默认30MB。

diskStore: 设置当缓存数量大于maxElementsInMemory设置的值是缓存到磁盘中的位置。仅在overflowToDisk为true时有效。path有四种设置方法,1、直接设置路径。2、user.home用户主目录.3、user.dir用户当前工作目录。4、java.io.tmpdir默认临时缓存目录。

配置好ehcache.xml文件后,要配置Hibernate配置文件.

在配置文件中写入:

<!-- 配置缓存提供类 -->
<property name="hibernate.cache.provider_class">
org.hibernate.cache.EhCacheProvider
</property>

<!-- 启用二级缓存,这也是它的默认配置 -->
<property name="hibernate.cache.use_second_level_cache">
true
</property>
<!-- 启用查询缓存 -->
<property name="hibernate.cache.use_query_cache">true</property>
<mapping resource="com/example/entity/Students.hbm.xml" />
<class-cache usage="read-write" class="com.example.entity.Students"
region="com.example.entity.Students" />

缓存提供类。2.1以上是这个。2.1以下为net.sf.hibernate.cache.EhCache。还有4.0以上应该不是这个文件了。

class-cache:设置缓存持久类。usage:设置缓存可读写。class:持久类全类名。region与ehcache中cache设置的name属性相同。不设置则为默认缓存策略。

设置持久类缓存有三种方法class-cache为其中一种。我看用着清晰方便就用的这种。还有一种注解形式,因为本人注解用的不太好所有没有研究这个。第三种方法就是,在Hibernate映射的*.hbm.xml文件中class标签下第一行设置

<cache usage="read-write"/>

注:SSH中hibernate配置的cache信息

1
<
prop
key
=
"hibernate.cache.provider_class"
>org.hibernate.cache.EhCacheProvider</
prop
>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息