MyBatis一级缓存和二级缓存~

什么是一级缓存

  • 一级缓存作用域在SQLSession中,同一个SQLSession中执行相同的SQL(参数、SQL相同),则第一次查询的结果写入缓存,第二次会直接读取缓存数据
  • 基于PerpetualCache的HashMap
  • 默认开启
  • 失效策略:当两次查询中间发生了增删改的操作,commit之后,则会清空selSession;比如:sqlSession关闭;

什么是二级缓存

  • namespace级别的(一般一个mapper文件一个namespace),多个sqlSession可以共用一个二级缓存。

    • 如果是多个mapping文件用了同一个namespace,那这两个文件将共用二级缓存。
  • 基于PerpetualCache的HashMap

  • 高级于一级缓存:可以自定义存储源:Redis之类的

  • 默认关闭

  • 失效策略:当两次查询中间发生了增删改的操作,commit之后,则会清空该二级缓存

  • 注意点:实现二级缓存时,MyBatis建议返回的POJO是可序列化的,所以建议实体类实现Serializable接口

  • 淘汰策略(算法)

    • FIFO:先进先出
    • LRU:最近最少使用淘汰
  • 开启方法:

    • 全局的mybatis配置文件
      • 这个配置使全局的映射器器(⼆二级缓存)启用或禁⽤用缓存,全局总开关,这⾥里里关闭,mapper中开启了也没⽤用
 <setting name="cacheEnabled" value="true" /> </settings>`
  • mapping文件
<cache eviction="LRU" flushInterval="100000" readOnly="true" size="1024"/>
  • 参数说明
    • eviction:缓存回收策略
      • FIFO
      • LRU
    • flushInterval:刷新时间间隔
      单位毫秒,如果不配置,则会再SQL执行时才刷新缓存
    • size:引用数目
      缓存可以存储多少个对象,设置过大会导致内存溢出
    • readOnly:只读标志
      缓存数据只能读取而不可修改

一级缓存和二级缓存的使用顺序

1.优先二级缓存
2.一级缓存
3.数据库

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值