springMVC+mybatis+ehcache详细配置

6 篇文章 0 订阅
1 篇文章 0 订阅

 (1)首先需要先需要两个主要的jar包

  1. ehcache-core-2.4.6.jar

  2. mybatis-ehcache-1.0.1.jar

ehcache-core一定要1.3以上的版本 因为1.3之前好像不支持集群的。

(2)创建一个ehcache.xml在类路径下面

<?xml version="1.0" encoding="utf-8"?>   
    <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd">       
     
    <diskStore path="java.io.tmpdir"/>  
    <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="30" timeToLiveSeconds="30" overflowToDisk="false"/>  
    <!--           
    配置自定义缓存          
    maxElementsInMemory:缓存中允许创建的最大对象数          
    eternal:缓存中对象是否为永久的,如果是,超时设置将被忽略,对象从不过期。          
    timeToIdleSeconds:缓存数据的钝化时间,也就是在一个元素消亡之前,                      
                    两次访问时间的最大时间间隔值,这只能在元素不是永久驻留时有效,                      
                    如果该值是 0 就意味着元素可以停顿无穷长的时间。          
    timeToLiveSeconds:缓存数据的生存时间,也就是一个元素从构建到消亡的最大时间间隔值,                                      这只能在元素不是永久驻留时有效,如果该值是0就意味着元素可以停顿无穷长的时间。          
    overflowToDisk:内存不足时,是否启用磁盘缓存。          
    memoryStoreEvictionPolicy:缓存满了之后的淘汰算法。      
    -->       
    <cache name="testCache"           
    maxElementsInMemory="10000"           
    eternal="true"          
    overflowToDisk="false"           
    timeToIdleSeconds="0"           
    timeToLiveSeconds="600"          
    memoryStoreEvictionPolicy="LFU" />  
</ehcache>

    上面的diskStor path 你可以指定某一个路径下,java.io.tmpdir 指的是你系统的缓存目录,可以百度下然后一般这个xml都需要有一个defaultCache,就是默认的cache配置  里面有哪些参数自己可以网上查查api

    然后下面我还配置了一个testCache,我找网上资料 没看到哪里明说,然后我自己测试,发现ehcache是可以生成多个cache的,每个cache可以根据不同的业务场景作用于不同的业务(即里面的参数配置不同),所以这样看似多配置了,其实是更加增加了灵活性。

   (3) 在spring的配置文件里面加上一段配置:
<!-- 使用ehcache缓存 -->    
   <bean id="ehCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">  
     <property name="configLocation" value="classpath:ehcache.xml" />  
   </bean>
这样就可以把ehcache和spring整合起来了

   (4)在对应的mapper.xml 里面加上:
<cache type="org.mybatis.caches.ehcache.LoggingEhcache" >  
    <property name="timeToIdleSeconds" value="3600"/><!--1 hour-->  
    <property name="timeToLiveSeconds" value="3600"/><!--1 hour-->  
    <property name="maxEntriesLocalHeap" value="1000"/>  
    <property name="maxEntriesLocalDisk" value="10000000"/>  
    <property name="memoryStoreEvictionPolicy" value="LRU"/>  
</cache>

后面的参数配置不加也可以,都会有一个默认值,大家也可以查查一共有哪些配置,然后根据自己的需要来配置,然后这个配置是会带上cache执行的日志,如果不要带日志可以把LogginEhcache改成EhcacheCache。

    在mapper.xml这样设置了默认是全部操作都会执行缓存策略,如果有某些sql不需要执行,可以把useCache设置为false。

<select id="selectByExample" resultMap="BaseResultMap" parameterType="com.anenjoy.manage.entity.TblUserTempExample" useCache="false" >
其实经过这样的配置ehcache已经基本OK了。接下来就测试一下。

原文测试代码如下:
long begin = System.nanoTime();  
        tempService.selectAll();  
        long end = System.nanoTime() - begin;  
        System.out.println("count :" + end);  
        // the second time  
        begin = System.nanoTime();  
        try {  
            tempService.insertTblUserTemp("1", "1", "1", "1");  
        } catch (NoSuchAlgorithmException e) {  
            e.printStackTrace();  
        }  
        end = System.nanoTime() - begin;  
        System.out.println("count :" + end);  
        // the second time  
        begin = System.nanoTime();  
        tempService.selectAll();  
        end = System.nanoTime() - begin;  
        System.out.println("count :" + end);  
        // the third time  
        begin = System.nanoTime();  
        tempService.selectAll();  
        end = System.nanoTime() - begin;  
        System.out.println("count :" + end);  
        return "";

这里面有4条输出语句

首先是查询一次某表     执行了查询sql

然后给某表插入一条信息  执行了插入sql

然后再查询某表   执行了查询sql,这是正确的  因为你执行了非查询语句,这个时候需要重新访问数据库

然后再一次查询某表  没有执行查询sql    这代表缓存是有用的,他就没有访问数据库了,直接从内存或者磁盘里面获取了

也可以根据count来查看操作的时间

count :681719

(5)

————————————————-com.anenjoy.manage.mapper.TblUserTempMapper.insert

insert into TBLUSERTEMP (ACTIVECODE, PASSWORDMD5, PASSWORDRANDOMKEY,

PHONE, EMAIL, USERNAME,

AWARTAR, STATUS, CREATEDATE,

USERID, IMSI, CHECKCODE

)

values (?, ?, ?,

?, ?, ?,

?, ?, ?,

?, ?, ?

)

count :129557388

————————————————-com.anenjoy.manage.mapper.TblUserTempMapper.selectByExample

select

ACTIVECODE, PASSWORDMD5, PASSWORDRANDOMKEY, PHONE, EMAIL, USERNAME, AWARTAR, STATUS,

CREATEDATE, USERID, IMSI, CHECKCODE

from TBLUSERTEMP

count :333938203

count :560704

然后这些基本上OK了

原文地址:http://www.darrenzhong.com/?p=73#codesyntax_6

源码下载:http://pan.baidu.com/s/1jGnATds   解压密码:Darren中博客

总结:以上两种方式我都有试过,也测试过两种方式的效率。在此发表一下个人观点,如有其他观点欢迎大家讨论。

  1. 使用ehcache+mybatis的查询效率不如springMVC+mybatis+ehcache的效率高。

  2. ehcache.xml配置文件中的<diskStore path="java.io.tmpdir"/>节点使用系统默认缓存位置的效率比使用自定义缓存位置 path="d:\cache"的效率要高。

最后附上我的demo源码:源码下载

源码里加了数据库的sql文件 直接导入即可,之前还试了mybatis数据库的读写分离。但是他们都是独立存在的,并不会互相影响。下次再写一篇关于数据库读写分离的吧。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值