第一步:在mybatis-config.xml 中配置了(可以不配置,默认是true):

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

只要没有显式地设置cacheEnabled=false,都会用CachingExecutor 装饰基本的执行器。

第二步:在Mapper.xml 中配置<cache/>标签:

<!-- 声明这个namespace 使用二级缓存-->
<cache type="org.apache.ibatis.cache.impl.PerpetualCache"
size="1024" <!—最多缓存对象个数,默认1024-->
eviction="LRU" <!—回收策略-->
flushInterval="120000" <!—自动刷新时间ms,未配置时只有调用时刷新-->
readOnly="false"/> <!—默认是false(安全),改为true 可读写时,对象必须支持序列
化-->

cache 属性详解:

属性 含义 取值
type 缓存实现类 需要实现Cache 接口,默认是PerpetualCache
size 最多缓存对象个数 默认1024
eviction 回收策略(缓存淘汰算法)

LRU – 最近最少使用的:移除最长时间不被使用的对象(默认)。

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

flushInterval 定时自动清空缓存间隔 自动刷新时间,单位ms,未配置时只有调用时刷新
readOnly 是否只读 true:只读缓存;会给所有调用者返回缓存对象的相同实例。因此这些对象
不能被修改。这提供了很重要的性能优势。
false:读写缓存;会返回缓存对象的拷贝(通过序列化),不会共享。这
会慢一些,但是安全,因此默认是false。
改为false 可读写时,对象必须支持序列化。
blocking 是否使用可重入锁实现
缓存的并发控制
true,会使用BlockingCache 对Cache 进行装饰
默认false

Mapper.xml 配置了<cache>之后,select()会被缓存。update()、delete()、insert()会刷新缓存。

思考:如果cacheEnabled=true,Mapper.xml 没有配置标签,还有二级缓存吗?还会出现CachingExecutor 包装对象吗?

只要cacheEnabled=true 基本执行器就会被装饰。有没有配置<cache>,决定了在启动的时候会不会创建这个mapper 的Cache 对象,最终会影响到CachingExecutorquery 方法里面的判断:

if (cache != null) {

如果某些查询方法对数据的实时性要求很高,不需要二级缓存,怎么办?

我们可以在单个Statement ID 上显式关闭二级缓存(默认是true):

<select id="selectBlog" resultMap="BaseResultMap" useCache="false">

了解了二级缓存的工作位置和开启关闭的方法之后,我们也来验证一下二级缓存。

MyBatis 缓存详解-开启二级缓存的方法相关推荐

  1. linux缓存详解,Linux磁盘缓存机制详解

    磁盘缓存出现的原因大概有两个:一是访问磁盘的速度远慢于访问内存的速度,通过在内存中缓存磁盘内容可以提高访问速度:二是根据程序的局部性原理,数据一旦被访问过,就很有可能在短时间内再次被访问,所以在内存中 ...

  2. MyBatis 缓存详解-二级缓存验证

    (验证二级缓存需要先开启二级缓存) 1.事务不提交,二级缓存不存在 BlogMapper mapper1 = session1.getMapper(BlogMapper.class); System. ...

  3. MyBatis 缓存详解-什么时候开启二级缓存?

    一级缓存默认是打开的,二级缓存需要配置才可以开启.那么我们必须思考一个问题,在什么情况下才有必要去开启二级缓存? 1.因为所有的增删改都会刷新二级缓存,导致二级缓存失效,所以适合在查询为主的应用中使用 ...

  4. MyBatis 一级缓存二级缓存详解

    相关内容: 架构师系列内容:架构师学习笔记(持续更新) MyBatis 缓存详解 cache 缓存 缓存是一般的ORM 框架都会提供的功能,目的就是提升查询的效率和减少数据库的压力.跟Hibernat ...

  5. Mybatis二级缓存详解

    Mybatis二级缓存 Mybatis相关全览 一.简介 二.一级缓存 1.入口 2.演示 案例一: 案例二: 3.总结 三.二级缓存 1.入口 2.如何开启二级缓存 cache-ref配置 cach ...

  6. MyBatis 缓存详解-二级缓存介绍

    二级缓存是用来解决一级缓存不能跨会话共享的问题的,范围是namespace 级别的,可以被多个SqlSession 共享(只要是同一个接口里面的相同方法,都可以共享),生命周期和应用同步. 思考一个问 ...

  7. Mybatis的一级缓存和二级缓存详解

    注:本笔记是根据尚硅谷的MyBatis视频记录的 对于任何一个持久层框架,都有缓存机制:缓存在电脑中有一块真实的存储空间(https://baike.baidu.com/item/%E7%BC%93% ...

  8. MyBatis中一级缓存和二级缓存详解

    缓存的作用 首先缓存的合理使用是优化中最常见的,将从数据库中查询出来的数据放入缓存中,下次使用时不必从数据库查询,而是直接从缓存中读取,避免频繁操作数据库,减轻数据的压力,同时提高系统性能. 为什么需 ...

  9. Mybatis中的缓存详解

    本文来说下Mybatis中的缓存 文章目录 Mybatis是什么 Mybatis的一级缓存 Mybatis的二级缓存 本文小结 Mybatis是什么 Mybatis是一个半自动 ORM(对象关系映射) ...

最新文章

  1. 百度Apollo发布海量自动驾驶数据集,还有两项重磅挑战赛
  2. 2位华人获得加州理工学院计算机、数学博士奖学金,3年近一半由华人获得
  3. c++中可以对类中私有成员中的静态变量初始化吗?
  4. 纹理对象的实时姿态估计
  5. 【Q】之Linux中的防火墙netfilter iptables
  6. get_metrology_object_result_contour查询计量对象的结果轮廓
  7. linux系统管理实验报告总结_Linux系统:常用Linux系统管理命令总结
  8. 自动行政审批流程组件的审批流程节点定义【民间称为工作流组件、官方称为审批流程组件】...
  9. Copy-and-swap
  10. python vecm_用Eviews处理有关VARVECM模型的几个问题
  11. 计算机五笔教案ppt,计算机应用基础课件(五笔字型课件).ppt
  12. 资料分析-第一章-统计术语
  13. 当SaaS遇上私域流量,小牛叮当如何做好B端服务?
  14. [CVPR2021]pi-GAN: Periodic Implicit Generative Adversarial Networks for 3D-Aware Image Synthesis
  15. wps流程图直线上怎么填字_流程图走起!使用WPS文字快速制作美观的流程图
  16. Linux_ubuntu系统安装Flash插件
  17. Unity3D中平衡类游戏player的基本应用实例
  18. X99 sSATA和SATA接口
  19. MAP地图采集制作学习路线
  20. 完全卸载SQL2000

热门文章

  1. 【HNOI2014】画框
  2. Spring MVC HelloWorld入门及运行机制 (一)
  3. 虚方法表与动态分派机制详解
  4. java上课作业(第三次)
  5. linux磁盘 分区 物理卷 卷组 逻辑卷 文件系统加载点操作案例
  6. 2014-2015-1学期使用的教材
  7. 2012_Houdini_ShowReel.
  8. WM_USER和WM_APP[转]
  9. 在实际开发中碰到的小问题,保存数据时提示:对象必须实现 IConvertible
  10. python-install-package-C++编译器问题---03