mybatis高级部分002缓存

文章详细介绍了MyBatis缓存的四种淘汰策略,包括LRU、FIFO、软引用和弱引用,并提到了默认配置。缓存可以通过设置flushInterval来控制刷新间隔,size用于限制缓存对象的数量。只读缓存提供性能优势,而读/写缓存允许对象的安全修改。一级缓存在SqlSession范围内,相关操作会自动清理缓存。
摘要由CSDN通过智能技术生成

属性

eviction

  LRU  最近最少使用的:移除最长时间不被使用的对象。

  FIFO  先进先出:按对象进入缓存的顺序来移除它们。

  SOFT  软引用:移除基于垃圾回收器状态和软引用规则的对象。

  WEAK  弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。默认是LRU

flushInterval

  刷新间隔,可以被设置为任意的正整数,而且它们代表一个合理的毫秒 形式的时间段。默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用语句时刷新。

size

  引用数目,可以被设置为任意正整数,要记住你缓存的对象数目和你运行环境的 可用内存资源数目。默认值是 1024

readOnly

  只读属性可以被设置为 true  false。只读的缓存会给所有调用者返回缓 存对象的相同实例。因此这些对象不能被修改。这提供了很重要的性能优势。可读写的缓存 会返回缓存对象的拷贝(通过序列化) 。这会慢一些,但是安全,因此默认是 false

映射语句文件中的所有 select 语句的结果将会被缓存。

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

缓存会使用最近最少使用算法(LRU, Least Recently Used)算法来清除不需要的缓存。

缓存不会定时进行刷新(也就是说,没有刷新间隔)。

缓存会保存列表或对象(无论查询方法返回哪种)的 1024 个引用。

缓存会被视为读/写缓存,这意味着获取到的对象并不是共享的,可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。

缓存只作用于 cache 标签所在的映射文件中的语句。如果你混合使用 Java API 和 XML 映射文件,在共用接口中的语句将不会被默认缓存。你需要使用 @CacheNamespaceRef 注解指定缓存作用域。

<cache
        eviction="FIFO"
        flushInterval="60000"
        size="512"
        readOnly="true"/>

cache-ref

其他命名空间缓存配置的引用

<cache-ref namespace="com.someone.application.data.SomeMapper"/>

缓存清空

 一级缓存是 SqlSession 范围的缓存,当调用 SqlSession 的修改,添加,删除,commit()close()方法时,就会清空一级缓存。

sqlSession.close();
//再次获取 SqlSession 对象
sqlSession = factory.openSession();
//此方法也可以清空缓存
userDao = sqlSession.getMapper(IUserDao.class);
sqlSession.clearCache();

执行的时序图

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值