首页 > 其他分享 >MyBatis中的缓存

MyBatis中的缓存

时间:2024-07-03 09:42:13浏览次数:9  
标签:缓存 一级 SqlSession 二级缓存 键值 MyBatis

一级缓存
一级缓存默认会启用,想要关闭一级缓存可以在 select 标签上配置 flushCache=“true”;一级缓存存在于 SqlSession 的生命周期中,在同一个 SqlSession 中查询时, MyBatis 会把执行的方法和参数通过算法生成缓存的键值,将键值和查询结果存入一个 Map 对象中。如果同一个 SqlSession 中执行的方法和参数完全一致,那么通过算法会生成相同的键值,当Map 缓存对象中己经存在该键值时,则会返回缓存中的对象;任何的 INSERT 、UPDATE 、DELETE 操作都会清空一级缓存;

二级缓存
二级缓存也叫应用缓存,存在于 SqlSessionFactory 的生命周期中,可以理解为跨 sqlSession;
缓存是以 namespace 为单位的,不同 namespace 下的操作互不影响。在 MyBatis 的核心配置文件中 cacheEnabled 参数是二级缓存的全局开关,默认值是 true,如果把这个参数设置为false,即使有后面的二级缓存配置,也不会生效;要开启二级缓存,你需要在你的 SQL Mapper 文件中添加配置:

这段配置的效果如下: 映射语句文件中的所有 select 语句将会被缓存。 映射语句文件中的所有 insert,update 和 delete 语句会刷新缓存。 缓存会使用 Least Recently Used(LRU,最近最少使用的)算法来收回。 根据时间表(比如 no Flush Interval,没有刷新间隔), 缓存不会以任何时间顺序 来刷新。 缓存会存储列表集合或对象(无论查询方法返回什么)的 512 个引用。 缓存会被视为是 read/write(可读/可写)的缓存;

缓存调用注意事项:

  1. 每次与数据库的连接都会优先从缓存中获取数据
  2. 先查二级缓存,再查一级缓存
  3. 二级缓存以 namespace 为单位的,是 SqlSession 共享的,容易出现脏读,建议避免使用二级缓存
  4. 一级缓存是 SqlSession 独享的,建议开启

标签:缓存,一级,SqlSession,二级缓存,键值,MyBatis
From: https://www.cnblogs.com/velloLei/p/18280990

相关文章

  • MyBatis的基本使用二
    动态SQL语句一、if判断id,userName,realName,sex,mobile,email,note,二、where字句where的作用:1.判断where中所有的条件判断成不成立,成立加where,2.第一个成立的条件去除and。anda.emaillikeCONCAT('%',#{email},'%')anda.sex=#{sex}......
  • Android经典面试题之Glide的缓存大揭秘
    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点Glide缓存关联类:Engine、LruResourceCache、LruCache、ActiveResourcesActiveResources:弱引用缓存池@VisibleForTestingfinalMap<Key,ResourceWeakReferenc......
  • MyBatis的几个核心类和基本用法
    1.SqlSessionFactoryBuilder:读取配置信息创建SqlSessionFactory,建造者模式,方法级别生命周期,方法结束生命周期结束;重点是建造出SqlSessionFactory工厂对象2.SqlSessionFactory:SqlSession工厂对象,用于创建Sqlsession,工厂单例模式,存在于程序的整个生命周期;3.SqlSession:代......
  • MyBatis2(MyBatis基础配置 动态代理 映射器 select 元素 insert 元素 update 元素和del
    目录一、MyBatis基础配置1.MyBatis配置文件2.<configuration>元素3.<enviroments>元素4.<properties>元素5.<typeAliases>元素6.<mappers>元素二、动态代理三、映射器1.映射器与接口2. 映射器的引入 3.映射器的组成 四、select元素参数传递多......
  • 数据分表——使用 Mybatis-Plus插件实现动态表名分表(按年份分表、按月份分表)
    本博客适合Mybatis-Plus3.4以上版本,笔者使用版本为3.5.3。分库与分表的原因1.业务场景:日志、交易流水表或者其他数据量大的表,通过日期进行了水平分表,需要通过日期参数,动态的查询数据。实现思路:利用MybatisPlus的动态表名插件DynamicTableNameInnerInterceptor,实现Sql执行......
  • MyBatis是什么以及为什么需要ORM框架、快速搭建
    MyBatis是什么MyBatis的前身是Ibatis,本质是一款半自动化的ORM框架,除了能对POJO进行ORM映射之外,还可以编写SQL脚本语句。主要是为了解决我们平时开发中经常写的JDBC代码,将繁琐的JDBC代码封装起来,化繁为简。MyBatis映射文件四要素:1.SQL语句2.映射规则3.POJO4.Mapper接口为......
  • 内存管理-11-buddy伙伴子系统-2-Per-CPU页帧缓存
    基于msm-5.4一、概述1.实现背景buddy子系统管理的物理页面,绝大多数都是放在zone::free_area[]中的链表中,少部分放在zone::lowmem_reserve[]中。还有少量页面放在zone::__percpupageset这个每CPU变量中,每种迁移类型也都对应一个链表,但是没有order,都是单页大小的内存块。......
  • Java高手的30k之路|面试宝典|精通MyBatis(一)
    基础知识架构图MyBatis的基本架构图,展示MyBatis核心组件及其相互关系:Configuration......
  • MyBatis-利用切面实现公有字段自动填充(非MyBatisPlus方式)
    需求:在MyBatis框架中,如何对createBy,createTime,updateBy等这些公有字段实现自动填充呢?网上搜了很多,实现的方案全是采用集成MyBatisPlus,利用其封装好的方法来实现的。。。。。数据准备:1、准备一张数据库表CREATETABLE`user`(`id`varchar(36)NOTNULL,`username`......
  • Memcached集群部署:构建高可用性缓存服务
    目录简介环境准备安装Memcached在Linux上安装在Windows上安装配置Memcached部署Memcached集群节点配置客户端配置负载均衡与故障转移监控与管理总结简介Memcached是一种高性能的分布式内存对象缓存系统,旨在通过减少数据库负载提高动态Web应用的响应速度。为了实现高......