MyBatis 缓存详解-开启二级缓存的方法
第一步:在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 – 先进先出:按对象进入缓存的顺序来移除它们。 |
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 缓存详解-开启二级缓存的方法相关推荐
- linux缓存详解,Linux磁盘缓存机制详解
磁盘缓存出现的原因大概有两个:一是访问磁盘的速度远慢于访问内存的速度,通过在内存中缓存磁盘内容可以提高访问速度:二是根据程序的局部性原理,数据一旦被访问过,就很有可能在短时间内再次被访问,所以在内存中 ...
- MyBatis 缓存详解-二级缓存验证
(验证二级缓存需要先开启二级缓存) 1.事务不提交,二级缓存不存在 BlogMapper mapper1 = session1.getMapper(BlogMapper.class); System. ...
- MyBatis 缓存详解-什么时候开启二级缓存?
一级缓存默认是打开的,二级缓存需要配置才可以开启.那么我们必须思考一个问题,在什么情况下才有必要去开启二级缓存? 1.因为所有的增删改都会刷新二级缓存,导致二级缓存失效,所以适合在查询为主的应用中使用 ...
- MyBatis 一级缓存二级缓存详解
相关内容: 架构师系列内容:架构师学习笔记(持续更新) MyBatis 缓存详解 cache 缓存 缓存是一般的ORM 框架都会提供的功能,目的就是提升查询的效率和减少数据库的压力.跟Hibernat ...
- Mybatis二级缓存详解
Mybatis二级缓存 Mybatis相关全览 一.简介 二.一级缓存 1.入口 2.演示 案例一: 案例二: 3.总结 三.二级缓存 1.入口 2.如何开启二级缓存 cache-ref配置 cach ...
- MyBatis 缓存详解-二级缓存介绍
二级缓存是用来解决一级缓存不能跨会话共享的问题的,范围是namespace 级别的,可以被多个SqlSession 共享(只要是同一个接口里面的相同方法,都可以共享),生命周期和应用同步. 思考一个问 ...
- Mybatis的一级缓存和二级缓存详解
注:本笔记是根据尚硅谷的MyBatis视频记录的 对于任何一个持久层框架,都有缓存机制:缓存在电脑中有一块真实的存储空间(https://baike.baidu.com/item/%E7%BC%93% ...
- MyBatis中一级缓存和二级缓存详解
缓存的作用 首先缓存的合理使用是优化中最常见的,将从数据库中查询出来的数据放入缓存中,下次使用时不必从数据库查询,而是直接从缓存中读取,避免频繁操作数据库,减轻数据的压力,同时提高系统性能. 为什么需 ...
- Mybatis中的缓存详解
本文来说下Mybatis中的缓存 文章目录 Mybatis是什么 Mybatis的一级缓存 Mybatis的二级缓存 本文小结 Mybatis是什么 Mybatis是一个半自动 ORM(对象关系映射) ...
最新文章
- 百度Apollo发布海量自动驾驶数据集,还有两项重磅挑战赛
- 2位华人获得加州理工学院计算机、数学博士奖学金,3年近一半由华人获得
- c++中可以对类中私有成员中的静态变量初始化吗?
- 纹理对象的实时姿态估计
- 【Q】之Linux中的防火墙netfilter iptables
- get_metrology_object_result_contour查询计量对象的结果轮廓
- linux系统管理实验报告总结_Linux系统:常用Linux系统管理命令总结
- 自动行政审批流程组件的审批流程节点定义【民间称为工作流组件、官方称为审批流程组件】...
- Copy-and-swap
- python vecm_用Eviews处理有关VARVECM模型的几个问题
- 计算机五笔教案ppt,计算机应用基础课件(五笔字型课件).ppt
- 资料分析-第一章-统计术语
- 当SaaS遇上私域流量,小牛叮当如何做好B端服务?
- [CVPR2021]pi-GAN: Periodic Implicit Generative Adversarial Networks for 3D-Aware Image Synthesis
- wps流程图直线上怎么填字_流程图走起!使用WPS文字快速制作美观的流程图
- Linux_ubuntu系统安装Flash插件
- Unity3D中平衡类游戏player的基本应用实例
- X99 sSATA和SATA接口
- MAP地图采集制作学习路线
- 完全卸载SQL2000
热门文章
- 【HNOI2014】画框
- Spring MVC HelloWorld入门及运行机制 (一)
- 虚方法表与动态分派机制详解
- java上课作业(第三次)
- linux磁盘 分区 物理卷 卷组 逻辑卷 文件系统加载点操作案例
- 2014-2015-1学期使用的教材
- 2012_Houdini_ShowReel.
- WM_USER和WM_APP[转]
- 在实际开发中碰到的小问题,保存数据时提示:对象必须实现 IConvertible
- python-install-package-C++编译器问题---03