浅谈Mybatis二级缓存的缺陷

 更新时间:2022年08月19日 16:29:13   作者:李显赤赤  
本文主要介绍了浅谈Mybatis二级缓存的缺陷,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一级缓存默认是开启的(但是整合了Spring,Mybatis的一级缓存默认就失效了)

二级缓存是要手动配置开启的(二级缓存是mapper级别的缓存,可以跨SqlSession)

Mybatis二级缓存

开启二级缓存(xml方式):在*Mapper.xml中加入如下代码

<!--eviction: 清空缓存的策略
    readOnly: 是否只读
    flushInterval: 每个60秒刷新一次缓存
    size: 内存大小,最多存储结果对象或者列表的512个引用 -->
<cache readOnly="true" eviction="FIFO" flushInterval="60000" size="512"/>

缓存清除策略

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

两种方式二选一,如果都配置会报错:Caches collection already contains value for com.lixianhe.dao.UserMapper

注意:使用Mybatis二级缓存必须是xml写SQL语句,不能使用注解写SQL语句

缓存的执行顺序

  • 先从二级缓存中查询,二级缓存没有进入SqlSession中查询
  • SqlSession没有就去数据库查询,然后存到一级缓存中,查询完关闭SqlSession
  • 一级缓存再提交给二级缓存

在开启二级缓存的情况下执行一条sql

select colA1, colA2, colB1, colB2 
from A, B 
where ...

A表执行了上述的sql
B表更新了字段cloB1,colB2
A表再次执行了上述的sql(前提没有执行insert、update、delete)
A表第二次就查询出了脏数据(B表的数据就是脏数据),这个问题对二级缓存来说是一个无解的问题

因此Mybatis二级缓存的使用用一个前提,必须保证所有的增删改查都在同一个namespace下才行

由于二级缓存的弊端,所以并不建议在实际生产中使用,而是在外部实现自己的缓存,如使用Redis做缓存

到此这篇关于浅谈Mybatis二级缓存的缺陷的文章就介绍到这了,更多相关Mybatis二级缓存内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MyBatis-Plus忽略多租户隔离自定义注解

    MyBatis-Plus忽略多租户隔离自定义注解

    本文主要介绍了MyBatis-Plus忽略多租户隔离自定义注解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-12-12
  • 使用Spring Data JPA的坑点记录总结

    使用Spring Data JPA的坑点记录总结

    这篇文章主要给大家总结介绍了关于使用Spring Data JPA的一些坑点,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-12-12
  • logback的FileAppender文件追加模式和冲突检测解读

    logback的FileAppender文件追加模式和冲突检测解读

    这篇文章主要为大家介绍了logback的FileAppender文件追加模式和冲突检测解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • yaml配置对象map使用示例

    yaml配置对象map使用示例

    这篇文章主要为大家介绍了yaml配置对象map使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • WebsocketClient断线的一些常见原因及解决办法

    WebsocketClient断线的一些常见原因及解决办法

    这篇文章主要给大家介绍了关于WebsocketClient断线的一些常见原因及解决办法,文中通过代码介绍的非常详细,对大家学习或者使用WebsocketClient断线具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-12-12
  • SpringBoot如何使用validator框架优雅地校验参数

    SpringBoot如何使用validator框架优雅地校验参数

    文章介绍了如何使用SpringValidation进行参数校验,包括引入依赖、@requestBody和@requestParam参数校验、统一异常处理、分组校验、嵌套校验、自定义校验、业务规则校验以及@Valid和@Validated的区别,同时,列举了常用的BeanValidation和HibernateValidator注解
    2025-02-02
  • 图解如何在Spring Boot中使用JSP页面

    图解如何在Spring Boot中使用JSP页面

    这篇文章主要介绍了图解如何在Spring Boot中使用JSP页面,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Java套接字(Socket)网络编程入门

    Java套接字(Socket)网络编程入门

    这篇文章主要介绍了Java套接字(Socket)网络编程入门,Socket可以理解为是对TCP/IP协议的抽象,需要的朋友可以参考下
    2015-10-10
  • Spring中属性文件properties的读取与使用详解

    Spring中属性文件properties的读取与使用详解

    这篇文章主要介绍了Spring中属性文件properties的读取与使用详解的相关资料,需要的朋友可以参考下
    2017-02-02
  • 基于SpringBoot bootstrap.yml配置未生效的解决

    基于SpringBoot bootstrap.yml配置未生效的解决

    这篇文章主要介绍了基于SpringBoot bootstrap.yml配置未生效的解决方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10

最新评论