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>






转载于:https://my.oschina.net/zhangxiaoc/blog/537312

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值