Mybatis的一级二级缓存

首先是一级缓存,mybatis的一级缓存是存放在SqlSession对象域中的。

  • 作用:避免重复查询相同数据时反复执行sql去数据库查询,减少查询次数,提高查询效率
  • 缺点:如果没有及时刷新缓存可能会导致数据不一致的情况,比如修改数据之后,查询数据时仍旧是修改之前的值,并且数据库中数据已经修改。
  • 解决数据不一致的办法
    1.我们可以对查询操作所用的session每次用完之后进行关闭,确保每次都是用一个新的session来查询数据。

二级缓存:

  • 二级缓存需要我们在mapper文件中手动开启,开启范围默认指定为整个mapper文件
  • 存储位置:二级缓存存储在SqlSessionFactory中,它可以被多个SqlSession访问
<Cache />

两者的刷新机制:

  • 进行增删改操作时会自动刷新一级二级缓存
  • 可以手动刷新二级缓存
  • 可以为二级缓存配置缓存刷新策略
<mapper namespace="com.yanwei.mapper.UserMapper">
    <!-- Cache 配置 -->
    <cache 
      blocking=""
  eviction ="FIFO" flushInterval ="60000" size ="512" readOnly ="true"
       type =""  /> </ mapper >
  • blocking:true或者false,Blocking=true,那么会调用BlockingCache,则针对同一个- CacheKey,拿数据与放数据、删数据是互斥的。

  • eviction:缓存回收策略,默认就是LRU.
    LRU – 最近最少使用的:移除最长时间不被使用的对象。
    FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
    SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象。
    WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。

  • flushInterval:刷新间隔。默认无刷新间隔,只有调用语句时刷新。

  • size:缓存的对象数目。默认值是 1024

  • readonly:属性可以被设置为 true 或 false。只读的缓存会给所有调用者返回缓存对象的相同实例

  • type:缓存类,可以自定义缓存,实现Cache,默认是"PERPETUAL",也就是org.apache.ibatis.cache.impl.PerpetualCache
    注:我们需要了解当我们执行增删改操作时候会自动刷新一级和二级缓存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值