Mybatis一级缓存和二级缓存

一级缓存

默认情况下,开启一级缓存。 SQL和参数完全一致,且缓存未超时时,mybatis会启用缓存。

一级缓存的生命周期
  1. mybatis在开启一个数据库会话时,会创建一个新的sqlSession对象,sqlSession对象中会有一个新的executor对象。该对象中持有一个新的perpetualCache对象。当会话结束时,sqlSession对象及其内部的executor对象还有perpetualCache对象也一并释放掉。

  2. 如果sqlSession调用了doset()方法,会释放掉一级缓存perpetualCache对象,一级缓存将不可用。

  3. 如果sqlSession调用了clearCache(),会清空perpetualCache对象的数据,但是该对象仍可用。

  4. sqlSession中执行了任何一个update操作(update,delete,insert ),都会清空perpetualCache对象的数据,但是该对象可以继续使用。
    在这里插入图片描述

二级缓存

  1. mybatis的二级缓存是application级别的缓存,它可以提高对数据库查询的效率,以提高应用的性能。

  2. 由于二级缓存不一定都存储到内存中,它的存储介质多种多样,所以需要给缓存的对象执行序列化(存到内存中可以不序列化)。即实现二级缓存是,pojo需实现serializeable接口。

  3. sqlSessionFactory层面的二级缓存默认不开启。 开启时,只需要在xml映射文件配置。开启后:
    a. 所有select语句将被缓存;
    b. 所有insert,update,delete操作会刷新缓存;
    c. 缓存会使用默认的least recently used(LRU,最近最少使用的)算法来收回;
    d. 根据时间表,比如no flush interval(CNFI,没有间隔的刷新),缓存不会以任何时间顺序来刷新;
    e. 缓存会存储列表集合或对象的1024个引用;
    f. 缓存会被视为是read/write(可读/可写)的缓存,意味着对象检索不是共享的,而且可以安全的被调用者修改,不干扰其他调用者或者线程所做的潜在修改。
    在这里插入图片描述
    在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值