mybatis的二级缓存有什么问题_Spring三级缓存

mybatis的二级缓存有什么问题_Spring三级缓存Mybatis二级缓存的缺陷

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

  • 一级缓存默认是开启的(但是整合了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 ...
  1. A表执行了上述的sql
  2. B表更新了字段cloB1,colB2
  3. A表再次执行了上述的sql(前提没有执行insert、update、delete)

A表第二次就查询出了脏数据(B表的数据就是脏数据),这个问题对二级缓存来说是一个无解的问题

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/191279.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【OpenCV人脸识别入门教程之二】人脸检测

    【OpenCV人脸识别入门教程之二】人脸检测本篇文章主要介绍了如何使用OpenCV实现人脸检测的功能。要实现人脸识别功能,首先要进行人脸检测,判断出图片中人脸的位置,才能进行下一步的操作。人脸检测的方法介绍OpenCV中的方法函数参数含义代码实现

    2022年6月7日
    83
  • 配置maven环境变量出错

    配置maven环境变量出错真是百思不得其解,在配置maven环境变量的时候通过下面的方法,尽管配置的环境完全正确,但在验证maven环境是否配置正确的时候却始终报错,报错内容如下所示:   出现此错误的配置方法如下: 1、右键“我的电脑”->”属性”; 2、在打开的属性面板里选择“高级系统设置”; 3、在打开的高级系统设置对话框中选择“环境变量”; 4、添加新的系统环境变量MA

    2022年5月14日
    54
  • [原创]-数据仓库ETL开发

    [原创]-数据仓库ETL开发ETL开发概述ETL是数据仓库的后台,主要包含抽取、清洗、规范化、提交四个步骤,传统数据仓库一般分为四层模型。分层的作用:1.划分ETL阶段工作重心,便于管理2.降低开发和维护成本3.减…

    2022年6月4日
    31
  • 分布式事务-TCC(Hmily)[通俗易懂]

    分布式事务-TCC(Hmily)[通俗易懂]TCC是什么:TCC是Try、Confirm、Cancel三个词语的缩写,TCC要求每个分支事务实现三个操作:预处理Try、确认Confirm、撤销Cancel。Try操作做业务检查及资源预留,Confirm做业务确认操作,Cancel实现一个与Try相反的操作即回滚操作。TM首先发起所有的分支事务的try操作,任何一个分支事务的try操作执行失败,TM将会发起所有分支事务的Cancel操作,若try操作全部成功,TM将会发起所有分支事务的Confirm操作,其中Confirm/Cancel操作若

    2022年5月21日
    56
  • springboot 跨域cookie

    springboot 跨域cookiespringboot跨域cookie跨域请求默认不会发送cookie数据,需做在请求发送端、服务端做一些配置才能发送、读取cookie数据************************应用1****************config层WebConfig@ConfigurationpublicclassWebConfigimplementsWebMvcConfigurer{@OverridepublicvoidaddViewControllers(V.

    2022年6月17日
    46
  • 观察者模式observer不适用于_观察者模式是什么

    观察者模式observer不适用于_观察者模式是什么观察者模式Obeserver动机模式定义实例结构图要点总结笔记动机在软件构建过程中,我们需要为某些对象建立 一种“通知依赖关系” —-一个对象发(目标对象)的状态发生改变,所有依赖的对象(观察者对象)都将很好的得到通知。如果这样的依赖关系过于紧密。将使软件不能很好的抵御变化使用面向对象技术 可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。模式定义定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(subject)的状态发生改变时,所有依赖于它的对象都得到通

    2022年8月11日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号