mybatis 为我们提供了一级缓存和二级缓存

一级缓存:

每个SqlSession中持有了Executor,每个Executor中有一个LocalCache。当用户发起查询时,MyBatis根据当前执行的语句生成MappedStatement,在Local Cache进行查询,如果缓存命中的话,直接返回结果给用户,如果缓存没有命中的话,查询数据库,结果写入Local Cache,最后返回结果给用户。

一级缓存配置:

<setting name="localCacheScope" value="SESSION"/> 共有两个选项,SESSION或者STATEMENT。 默认是SESSION级别,即在一个MyBatis会话中执行的所有语句,都会共享这一个缓存。 一种是STATEMENT级别,可以理解为缓存只对当前执行的这一个Statement有效。

二级缓存:

二级缓存开启后,同一个namespace下的所有操作语句,都影响着同一个Cache,即二级缓存被多个SqlSession共享,是一个全局的变量。

当开启缓存后,数据的查询执行的流程就是 二级缓存 -> 一级缓存 -> 数据库。

二级缓存配置:

<setting name="cacheEnabled" value="true"/>

如果需要在多个Sqlsession之间共享缓存,就需要使用二级缓存;二级缓存默认关闭,需要手动配置开启。开启二级缓存后,先在 CachingExecutor 进行二级缓存查询。二级缓存的POJO对象必须可以序列化,需要实现Serializable 接口。

一级缓存、二级缓存都是本地缓存,在分布式系统中无法保证全局的一致性。可以使用Mybatis的自定义缓存能力进行扩展,实现Cache 接口,有一定的开发成本在。把数据缓存在redis或其他流行的分布式缓存服务器中,来解决数据一致性问题,可能成本更低、安全性也更高。

mybatis 一二级缓存简述相关推荐

  1. 洛神说看完这篇Mybatis一二级缓存要是你还不会,就送你个学妹!skr

    人世仙家本自殊,何须相见向中途.惊鸿瞥过游龙去,漫恼陈王一事无. 嗨,大家好,我是洛神,性别男.一个来自快乐星球的程序员. 欢迎大家专注我的公众号[程序员洛神],不仅分享技术,还会分享生活趣事.体育. ...

  2. 【MyBatis源码解析】MyBatis一二级缓存

    MyBatis缓存 我们知道,频繁的数据库操作是非常耗费性能的(主要是因为对于DB而言,数据是持久化在磁盘中的,因此查询操作需要通过IO,IO操作速度相比内存操作速度慢了好几个量级),尤其是对于一些相 ...

  3. Mybatis一二级缓存的理解

        频繁的数据库操作是非常耗费性能的(主要是因为对于DB而言,数据是持久化在磁盘中的,因此查询操作需要通过IO,IO操作速度相比内存操作速度慢了好几个量级),尤其是对于一些相同的查询语句,完全可以 ...

  4. Mybatis 实现原理之 一二级缓存

    文章目录 引言 SqlSession的生命周期 SqlSession的创建 -- 动态代理和包装器 Mybatis的一级缓存 -- 基于SqlSession Mybatis的一级缓存的可行性分析 My ...

  5. ORM框架之Mybatis(三)延迟加载、开启一二级缓存及使用注解增删改查

    一.Mybatis延迟加载策略 Mybatis中一对一,一对多,多对多关系的配置及实现,可以实现对象的关联查询.实际开发过程中很多时候我们并不需要总是在加载用户信息时就一定要加载他的账户信息.此时就是 ...

  6. 【Mybatis】一二级缓存的源码研究

    Mybatis的一级缓存 Mybatis对缓存提供支持,但是在没有配置的默认情况下,它只开启一级缓存,一级缓存只是相对于同一个SqlSession而言.所以在参数和SQL完全一样的情况下,我们使用同一 ...

  7. MyBatis 一二级的缓存机制详解

    为什么要用缓存? MyBatis 的缓存 Mybatis的一级缓存和二级缓存执行顺序 一级缓存工作原理: 操作过程: 总结 二级缓存实现原理 图解: cache属性的简介: 操作过程: 禁用二级缓存: ...

  8. springboot mybatis 事务_SpringBoot 下 Mybatis 的缓存

    "IT魔幻屋"致力于让你遇见更好的自己! 说起 mybatis,作为 Java 程序员应该是无人不知,它是常用的数据库访问框架.与 Spring 和 Struts 组成了 Java ...

  9. MyBatis:缓存机制详解

    本篇内容包括:MyBatis 缓存机制概述.一级缓存与二级缓存的介绍.配置和具体流程. 一.MyBatis 缓存机制概述 在我们常见的 OLTP(on-line transaction process ...

最新文章

  1. 实时的激光雷达点云压缩
  2. 危机下,你还敢提加薪吗?
  3. 我的Android进阶之旅------gt;Android 关于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题...
  4. JBoss5.x6.x 反序列化漏洞
  5. 天池 在线编程 删除字符(单调栈)
  6. Perl多线程ping加端口扫描
  7. pytorch自动微分的几个例子
  8. 计算机专业国培总结,2016年信息技术教师国培心得体会(2篇)
  9. 如何学习HyperMesh
  10. 原子哥家的 SIM800L透传模式配置
  11. 访问共享文件夹总是提示“指定的网络名不再可用”,重启就好了
  12. MySQL 根据身份证查找年龄段
  13. 海思芯片MPP工作流程
  14. Android 中 使用 Google Paly 支付 简介
  15. 敏捷开发松结对编程系列:L型代码结构案例StatusFiltersDropdownList(上)
  16. eclipse改成护眼背景色
  17. linux服务器磁盘空间扩充
  18. 迷宫 做的第一个搜索题
  19. 怎么搜集家谱资料?四个内容两个方法,打造传世的精神财富
  20. 以世界杯为主题的营销活动|运营策略

热门文章

  1. http://java.sun.com/jsp/jstl/core cannot be resolved(含有jstl1.2jar包网盘)
  2. Spring模块介绍
  3. windows server 2012 磁盘整理功能 试用 chkdsk
  4. Linux 目录栈及目录切换
  5. 智能实验室-CHM浏览器(CHM Explorer) 2.0.0.200
  6. PowerDNS管理工具开发中学习到的DNS知识
  7. 深入实践Spring Boot1.3 使用Spring Boot
  8. [20161128]关于Little Enddian.txt
  9. Swift 2.3- 3.0
  10. 懒与馋的平衡:餐饮O2O市场广阔,发展不易