mybatis的缓存机制

目录

一级缓存
二级级缓存
第三方缓存

缓存机制:将执行后的sql语句存储在缓存(硬盘)中,下次执行相同的sql的时候,就从缓存中取。mybatis中默认会开启一级缓存。

一级缓存
      默认开启一级缓存,是sqlsession级别的,所以不需要手动设置,在使用sqlsession对象操作数据库的时候,使用sql语句,就会自动使用一级缓存。

注意:一级缓存失效的几种情况:

  • 不同的sqlsession对应不同的一级缓存。
  • 同一个sqlsession但是不同的查询条件。
  • 同一个sqlsession两次查询期间执行了任何一次增删改操作。
  • 同一个sqlsession两次查询期间手动清空了缓存。

二级缓存
      默认不开启,访问同一个映射文件就会进行缓存,是映射级别的。需要手动开启。

      (1) 开启二级缓存的步骤级注意点:

  • 在配置文件的setting标签中配置 name=“cacheEnabled” value=“true”
  • 在需要使用二级缓存的映射文件中,配置缓存cache标签
  • 需要在实体类中实现Serializable接口

注意:需要在sqlsession关闭 或 提交后才能生效。

      (2) 二级缓存的相关属性:

  • eviction=“FIFO”,缓存回收策略。
    LRU-最近最少使用的:移除最长时间不被使用的对象。
    FIFO-先进先出:按对象的先后顺序来移除。
    SOFT-软引用:移除基于垃圾回收器状态和引用规则的对象。
    WEAK-弱引用:移除基于垃圾回收器状态和弱用规则的对象。
  • flushInterval:刷新间隔,单位为毫秒。默认没有刷新间隔,缓存只是在调用语句时刷新。
  • size:引用数目,代表缓存最多可以存储多少个对象,太大容易导致内存溢出。
  • readOnly:只读,
    true:只读缓存,返回缓存对象的相同实例,
    false:读写缓存,返回缓存对象的拷贝。

      (3) 缓存的相关属性的设置

  • 全局setting的cacheEnable:配置二级缓存开关,一级缓存一直开着。

  • select标签中的useCache:是否使用二级缓存,一级缓存一直使用。

  • sql标签的flushCache:增删默认为true,sql执行后,同时清空缓存。查询默认为false。

  • sqlsession.clearCache():只是用来清除一级缓存。
    返回顶部

第三方缓存
      使用EhCache是一个纯java的进程内缓存框架。是Hibernate中默认的CacheProvider

(1) 导入jar包
ehcashe-core、mybatis-ehcashe、slf4j-api、slf4j-log4j

(2) 配置ehcashe.xml配置文件

<?xml version="1.0" encoding="UTF-8">
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:onNamespaceSchemaLocation="../config/ehcache.xsd">

<!--磁盘保存路径-->
<diskStore path="D:\atguigu\ehcache" />

<defaultCache
	maxElementsInMemory="1000"
	maxElementsOnDisk="10000000"
	eternal="false"
	overflowToDisk="true"
	timeToIdleSeconds="120"
	timeToLiveSeconds="120"
	diskExpiryThreadIntervalSeconds="120"
	memoryStoreEvictionPolicy="LRU"
>
</defaultCache>
</ehcache>

(3) 配置cache

<cache type="org.mybatis.caches.ehcache.EhcacheCache"></cache>

返回顶部

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值