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做缓存

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Adobe Flash Player 未能正常运行问题「建议收藏」

    Adobe Flash Player 未能正常运行问题「建议收藏」问题描述笔者使用的QQ浏览器在打开含有Flash的网页时经常出现如下问题:提示:您的AdobeFlashPlayer版本太旧,可能会有安全性风险。建议您升级到最新版本。随后出现:提示:必要的系统组件未能正常运行,请修复AdobeFlashPlayer点击立即修复,安装最新的AdobeFlashPlayer,结果没有任何作用。-原因探寻按照网上的现有方法,都说是因为FlashHelperService进程没能正常启动,或者是直接把FlashHelperS

  • EXT-GWT、GWT与EXTJS之间的关系

    EXT-GWT、GWT与EXTJS之间的关系

  • python中的sys模块函数

    python中的sys模块函数Sys模块

  • 关于.gitignore不起作用「建议收藏」

    关于.gitignore不起作用「建议收藏」由于公司和家里的as版本不同,倒腾了好久,但是代码到本地后build.gradle等文件做了修改,为了不影响公司版本,故家里的需要忽略这些文件的修改,想到的就是加gitignore配置,直接添加不起效果,找到如下办法:有时我们发现添加.gitignore文件后并没有忽略我们想要忽略的文件,解决方法就是清除一下缓存,原因gitignore对已经追踪(track)的文件无效,清除缓存后文件将以未追

    2022年10月21日
  • web渗透测试—-33、HttpOnly[通俗易懂]

    web渗透测试—-33、HttpOnly[通俗易懂]HttpOnly是微软公司的InternetExplorer6SP1引入的一项新特性。这个特性为cookie提供了一个新属性,用以阻止客户端脚本访问Cookie,至今已经称为一个标准,几乎所有的浏览器都会支持HttpOnly。下面示例显示了HTTP响应标头中HttpOnly使用的语法:Set-Cookie:<name>=<value>[;<Max-Age>=<age>]`[;expires=<date>][;domain=&lt

  • JDK的下载、安装和环境配置教程(2021年,win10)

    JDK的下载、安装和配置JDK的下载输入下载地址:https://www.oracle.com/downloads/往下拉,看到DeveloperDownloads,点击java点击Java(JDK)forDevelopers选择你想要下载的jdk版本点击JDKDownloads,往下拉,(有可能会提示先登录账号,才能下载。没账号的可以注册一个)我的系统是Windows的64位,个人偏爱压缩版,所以选择了jdk-14.0.1_windows-

发表回复

您的电子邮箱地址不会被公开。

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