mybatis二级缓存的使用场景有哪些?如何开启二级缓存?

KLQ 2020-06-11 10:47:32 java常见问答 4282

之前给大家带来过mybatis缓存的解释,那么下面要给大家介绍的就是mybatis二级缓存的使用场景以及开启二级缓存的步骤,一起通过下面的文章来了解一下吧。

一、mybatis二级缓存的使用场景

对于一些访问多的查询请求,并且,用户对于查询结果的实时性要求不高的时候,就可以采用mybatis二级缓存,通过mybatis二级缓存技术,降低数据库的访问量,提高访问的速度。

业务场景:

1、电话账单查询sql;2、耗时较高的统计分析sql等等。

下面是具体的实现方法:

通过设置刷新间隔时间,由mybatis每隔一段时间自动清空缓存。

依据数据变化的频率,设置缓存刷新间隔flushInterval。

例:

设置成30分钟、60分钟、24小时等等,具体要依据需求来决定。

二、mybatis怎样开启二级缓存?

下面是具体的步骤:

1、导入ehcache相关jar包

ehcache - core - 2.6 .5.jar
mybatis - ehcache - 1.1 .0.jar <
    dependency >
    <groupId>net.sf.ehcache</groupId> <
    artifactId > ehcache - core < /artifactId> <
    version > 2.6 .6 < /version> <
    /dependency> <
    !--https: //mvnrepository.com/artifact/org.mybatis.caches/mybatis-ehcache -->
    <dependency>
          <groupId>org.mybatis.caches</groupId>
          <artifactId>mybatis-ehcache</artifactId>
          <version>1.1.0</version>
      </dependency>

2、开启mybatis二级缓存

在mybatis核心配置文件mybatis - config.xml中加入 <
    settings >
    <!-- 开启二级缓存 -->
                <setting name="cacheEnabled" value="true" /> <
    /settings>

3、将ehcache.xml文件加到classpath下

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
 
    <diskStore path="java.io.tmpdir"/>
 
	<defaultCache
            maxElementsInMemory="10000"
            eternal="false"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            overflowToDisk="true"
            maxElementsOnDisk="10000000"
            diskPersistent="false"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU"
            />
			
	<!--
		默认缓存配置,
		以下属性是必须的:
			name :cache的标识符,在一个CacheManager中必须唯一。
			maxElementsInMemory : 在内存中缓存的element的最大数目。
			maxElementsOnDisk : 在磁盘上缓存的element的最大数目。
			eternal : 设定缓存的elements是否有有效期。如果为true,timeouts属性被忽略。
			overflowToDisk : 设定当内存缓存溢出的时候是否将过期的element缓存到磁盘上。
		以下属性是可选的:
			 timeToIdleSeconds : 缓存element在过期前的空闲时间。
			 timeToLiveSeconds : 缓存element的有效生命期。
			 diskPersistent : 在VM重启的时候是否持久化磁盘缓存,默认是false。
			 diskExpiryThreadIntervalSeconds : 磁盘缓存的清理线程运行间隔,默认是120秒.
			 memoryStoreEvictionPolicy : 当内存缓存达到最大,有新的element加入的时候,
				移除缓存中element的策略。默认是LRU,可选的有LFU和FIFO
	-->
</ehcache>

4、在UserMapper.xml当中开启二缓存

<cache type="org.mybatis.caches.ehcache.EhcacheCache">
                <!-- timeToLiveSeconds 缓存自创建日期起至失效时的间隔时间 -->
                <property name="timeToIdleSeconds" value="3600" />
 
                <!-- timeToIdleSeconds 缓存创建以后,最后一次访问缓存的日期至失效之时的时间间隔 -->
                <property name="timeToLiveSeconds" value="3600" />
 
                <!-- 同ehcache参数maxElementsInMemory -->
                <property name="maxEntriesLocalHeap" value="1000" />
 
                <!-- 同ehcache参数maxElementsOnDisk -->
                <property name="maxEntriesLocalDisk" value="10000000" />
                
                <!-- 当内存缓存达到最大,有新的element加入的时候, 移除缓存中element的策略。默认是LRU(最近最少使用),可选的有LFU(最不常使用)和FIFO 
                    (先进先出) -->
                <property name="memoryStoreEvictionPolicy" value="LRU" />
     </cache> <
!--mybatis ehcache缓存配置-- >
<!-- 以下两个<cache>标签二选一,第一个可以输出日志,第二个不输出日志 -->
             <cache type="org.mybatis.caches.ehcache.LoggingEhcache" />
           
             <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>

sql映射文件中

<cache type="org.mybatis.caches.ehcache.EhcacheCache">
        <!-- timeToLiveSeconds 缓存自创建日期起至失效时的间隔时间 -->
        <property name="timeToIdleSeconds" value="3600" />
 
        <!-- timeToIdleSeconds 缓存创建以后,最后一次访问缓存的日期至失效之时的时间间隔 -->
        <property name="timeToLiveSeconds" value="3600" />
 
        <!-- 同ehcache参数maxElementsInMemory -->
        <property name="maxEntriesLocalHeap" value="1000" />
 
        <!-- 同ehcache参数maxElementsOnDisk -->
        <property name="maxEntriesLocalDisk" value="10000000" />
 
        <!-- 当内存缓存达到最大,有新的element加入的时候, 移除缓存中element的策略。默认是LRU(最近最少使用),可选的有LFU(最不常使用)和FIFO
            (先进先出) -->
        <property name="memoryStoreEvictionPolicy" value="LRU" />
    </cache>

dao实现类中

@Override
public List < Person > selectAll()
{
    //步骤:
    //通过工具类获得SqlSession的实例
    SqlSession sqlSession = MyBatisUtil.getSqlSessionInstance();
    List < Person > persons = sqlSession.selectList("com.uplooking.dao.PersonDao.selectAll");
    System.out.println("第一次查询到的员工数是:" + persons);
    //关闭sqlSession(让一级缓存失效)
    MyBatisUtil.releaseResource(sqlSession);
    //执行完下面的代码行,控制台若没有sql语句输出,证明结果来自于二级缓存,而不是重新查询的数据库。
    sqlSession = MyBatisUtil.getSqlSessionInstance();
    persons = sqlSession.selectList("com.uplooking.dao.PersonDao.selectAll");
    System.out.println("第二次查询到的员工数是:" + persons);
    //释放资源
    MyBatisUtil.releaseResource(sqlSession);
    return persons;
}

mybatis二级缓存使用场景以及开启就给大家介绍到这里了,更多mybatis常见问题,可以继续关注本站来进行了解哦。

推荐阅读:

mybatis缓存的工作原理是什么?mybatis缓存机制

mybatis二级缓存原理是怎样的?原理详解

mybatis二级缓存缺陷是什么?有什么弊端?