Ehcache与mybaits配置讲解

一、Ehcache缓存机制

Ehcache属于二级缓存。缓存的粒度是单个实体类,也就是说当更新,修改,删除时,会将整个实体表中的数据在缓存中清空。这也是Ehcache的局限性。接下来说下Ehcache缓存策略,比如查询商品表,商品表加上了Ehcache
1. select * from 商品表。首先会去一级缓存查询,其次到二级缓存,最后才会到数据库查询实体记录。
2. 将获取到所有商品对象的ID集合存入二级缓存中
3. 当根据ID查询时,步骤与第一步类似
4. 更新、修改、删除会将缓存中的数据清空,重新加载商品表。

二、Ehcache作用

因为Ehcache会将数据放到内存中,而内存中读取的效率比硬盘快。所以增加了数据读取的效率。其次Ehcache是轻量级的,内部仅仅依赖了slf4j。且配置简单,学习成本较低。Ehcache可以弥补mybaits自带的cache的不足。

三、Ehcache与mybaits结合

1)首先是加入依赖包mybatis-ehcache

<!--ehcache 缓存-->
<dependency>
    <groupId>org.mybatis.caches</groupId>
    <artifactId>mybatis-ehcache</artifactId>
    <version>1.1.0</version>
</dependency>

2)配置ehcache.xml
默认会在classpath路径下加载ehcache.xml。所以我们创建一个ehcache.xml

<?xml version="1.0" encoding="UTF-8"?>
<ehcache >
    <!--
        maxElementsInMemory:缓存中最大允许创建的对象数
        maxInMemory:设定内存中创建对象的最大值。
        eternal:设置元素(译注:内存中对象)是否永久驻留。如果是,将忽略超时限制且元素永不消亡。
        timeToIdleSeconds:设置某个元素消亡前的停顿时间。仅当eternal为false时起效
        timeToLiveSeconds:为元素设置消亡前的生存时间.仅当eternal为false时起效.默认为0,即存活时间无限大
        overflowToDisk:设置当内存中缓存达到 maxInMemory 限制时元素是否可写到磁盘上。
        memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。
        diskPersistent:重启时内存不持久化到硬盘。默认为false
        diskExpiryThreadIntervalSeconds:磁盘中清理线程运行间隔
    -->
    <diskStore path="D:/cache"/><!-- 缓存存放目录(此目录为放入系统默认缓存目录),也可以是”D:/cache“ java.io.tmpdir -->
    <defaultCache
        maxElementsInMemory="10000"
        eternal="false"
        timeToIdleSeconds="120"
        timeToLiveSeconds="140"
        diskExpiryThreadIntervalSeconds="120"
        memoryStoreEvictionPolicy="LRU">
        <persistence strategy="localTempSwap"/>
    </defaultCache>

    <cache name="cacheTest"
           maxElementsInMemory="1000"
           eternal="false"
           timeToIdleSeconds="120"
           timeToLiveSeconds="140"
           diskExpiryThreadIntervalSeconds="120"
           memoryStoreEvictionPolicy="LRU">
        <persistence strategy="localTempSwap"/>
    </cache>

</ehcache>

3)mybaits配置打开缓存

<configuration>
    <!--配置全局属性-->
    <settings>
       ····
        <!--开启缓存-->
        <setting name="cacheEnabled" value="true"/>

    </settings>
</configuration>

4)实体mapper配置

<!--
    LoggingEhcache 过时了
    Not needed with MyBatis 3.2.x
    <cache type="org.mybatis.caches.ehcache.LoggingEhcache" />

    与EhcacheCache区别在于是否打印日志
-->
<cache type="org.mybatis.caches.ehcache.EhcacheCache" />

四、总结

Ehcache虽然可以增加访问数据的速度,但也有他一定的局限性。比如上面所讲到的,对于细粒度的数据来说,可维护性不是很好。比如缓存商品信息,由于商品信息访问量大,所以需要将商品信息进行缓存,此时如果用Ehcache缓存,就无法实现当一个商品变化时,只刷新该商品的缓存信息而不刷新其他商品。因为ehcache的单位为单个mapper。即刷新一个商品信息时,会将所有商品信息从缓冲中清空,重新赋值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值