之前给大家带来过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常见问题,可以继续关注本站来进行了解哦。
推荐阅读: