0409-0415周:MyBatis缓存

一、系统缓存(一级缓存和二级缓存)

MyBatis对缓存提供支持,默认情况下只开启一级缓存。

一级缓存:

在参数和SQL完全一样的情况下,我们使用同一个 SqlSession对象调用同一个 Mapper的方法,往往只执行一次SQL,因为使用 SqlSession第一次查询后, MyBatis会将其放在缓存中,以后再查询的时候,如果没有声明需要刷新,并且缓存没超时的情况下 SqlSession 都只会取出当前缓存的数据,而不会次发送SQL到数据库。
不同的SqlSession对象是相互隔离的。

二级缓存:

二级缓存在SqlSessionFactory层面上提供给各个SqlSession对象共享。
1、二级缓存的开启需要配置 :只需在xml文件中配置:
2、MyBatis需要返回的POJO必须是可序列化的 实现Serializable接口

满足上面的1、2后,即可使用二级缓存,即:
● 映射语句文件中的所有 select语句将会被缓存

● 映射语句文件中的所有 insert、 update和 delete语句会刷新缓存。

● 缓存会使用默认的 Least Recently Used(LRU,最近最少使用的)算法来收回
● 根据时间表,比如 No Flush Interval,(CFI,没有刷新间隔),缓存不会以任何时间顺序来刷新。

● 缓存会存储列表集合或对象(无论查询法返回什么)的1024个引用。

● 缓存会被视为是 read/write(可读/可写)的缓存,意味着对象检索不是共享的,而且可以安全地被调用者修改,不干扰其他调用者或线程所做的潜在修改。

关于二级缓存配置的一些属性:

 <cache eviction="LRU"     flushInterval="100000"   sizes="1024"   readOnly="true"/>

● eviction:代表的是缓存回收策略,目前 My Batis提供以下策略。
1)LRU,最近最少使用的,移除最长时间不用的对象。
2)FIFO,先进先出,按对象进入缓存的顺序来移除它们。
3)SOFT,软引用,移除基于垃圾回收器状态和软引用规则的对象。
4)WEAK,弱引用,更积极地移除基于垃圾收集器状态和弱引用规则的对象。这里采用的是LRU,移除最长时间不用的对象。
● flushInterval:刷新间隔时间,单位为毫秒,这里配置是100秒刷新,如果你不配
置它,那么当SOL被执行的时候才会去刷新缓存
● size:引用数目,一个正整数,代表缓存最多可以存储多少个对象,不宜设置过大。设置过大会导致内存溢出。这里配置的是1024个对象。
● readOnly:只读,意味着缓存数据只能读取而不能修改,这样设置的好处是我们可以快速读取缓存,缺点是我们没有办法修改缓存,它的默认值为 false,允许我们修改。

自定义缓存

1、配置自定义缓存

<cache type = “com.learn.MyCache”/>

MyCache是自定义的缓存类,该类需要实现mybatis提供的接口:org.apache.ibatis.cache.Cache
2、自定义缓存参数

<cache type=“MyCache”>
<property name = “hostvalue=“localhost”/>
</cache>

也可在缓存类MyCache类中增加setHost方法
3、配置SQL层面上的缓存规则
useCache:是否使用缓存
flushCache:插入后是否需要刷新缓存

<select ... flushCache = “false”  useCache = “true”/>
<insert ... flushCache = “true”/>
<update ... flushCache = “true”/>
<delete ... flushCache = “true”/>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值