MybatisPlus二级缓存
一、序言
本文承接[Mybatis缓存体系探究],提供基于MybatisPlus技术可用于生产环境下的二级缓存解决方案。

1、前置条件
- 掌握MyBatis二级缓存的原理
有关MyBatis缓存原理内容,参考[Mybatis缓存体系探究]
- 选择符合条件的MybatisPlus版本
本方案对MybatisPlus版本有严格的限制,使用版本不低于3.4.3.4,如果低于此版本,则无法满足生产环境条件下的闭环需求。
- 正确处理连接(多表)查询
正确的多表连接查询,请参考[MybatisPlus连接查询解决方案]
2、目标与收获
如果应用有分布式缓存需求,那么直接弃用二级缓存的方案,直接选配业务层缓存方案。
假如应用没有分布式场景,那么通过简单改造,引入二级缓存,能够极大提高响应效率。
二、原理分析
1、二级缓存
选用MybatisPlus来实现二级缓存最大的考量是其使用的单表操作,换而言之,正确的使用二级缓存的前提是不能使用传统意义上的多表连接操作,否则一定存在缓存数据不能实时更新的情况。
2、缓存数据更新
所有的缓存数据必然涉及到数据更新,二级缓存同样需要主动更新数据。二级缓存是以命名空间为单位的,换而言之同一个命名空间内的数据更新会自动触发缓存更新(本质为数据失效)。查询操作缓存数据,增加、修改、删除数据使缓存失效。
自成体系的缓存更新与管理在提高了应用响应速度的同时降低了缓存管理的复杂度,有利于提高开发效率。
3、缓存的区别
这里提到的二级缓存有必要与三级缓存(业务缓存)做区分,二级缓存指DAO层缓存,使用缓存的目的是降低网络IO对应用的影响;三级缓存指业务层缓存,主要是降低复杂计算对CPU性能的占用。
三、本地二级缓存
对于普通项目,使用内置本地二级缓存即能够满足需求,这里以MybatisPlus为例说明如何正确的使用二级缓存。
1、两套API
MybatisPlus内置封装两套访问数据库的API,一是以BaseMapper为基础的API,另一套是以AR为基础的API,二者在使用二级缓存不可通用。表现形式是BaseMapper内置接口缓存的数据,使用AR内置接口更新数据时无法清楚缓存,至少到此版本尚不支持。
考虑到BaseMapper接口体系比较丰富,因此选择保留BaseMapper体系接口而禁用AR接口,从机制上保证使用的是一套接口,从而调用增删查改能够实时刷新二级缓存。
需要指明的是Mapper层和Service层使用的是同一套接口,因此可放心使用。
2、缓存实现类型
默认二级缓存实现类型为PerpetualCache,此中类型的缓存要求被缓存的对象实现序列化接口。其它类型的本地缓存有EhCache、Caffeine等。

MybatisPlus二级缓存的更多相关文章
- MyBatis-plus二级缓存使用
MyBatis二级缓存使用 注意点: 在最新的3.x版本,实现二级缓存的配置也有了一些改变. 官方建议在service使用缓存,但是你也可以直接在mapper层缓存,这里的二级缓存就是直接在Mappe ...
- SpringBoot30 整合Mybatis-Plus、整合Redis、利用Ehcache实现二级缓存、利用SpringCache和Redis作为缓存
1 环境说明 JDK: 1.8 MAVEN: 3. SpringBoot: 2.0.4 2 SpringBoot集成Mybatis-Plus 2.1 创建SpringBoot 利用IDEA创建Spri ...
- mybatis基础系列(四)——关联查询、延迟加载、一级缓存与二级缓存
关本文是Mybatis基础系列的第四篇文章,点击下面链接可以查看前面的文章: mybatis基础系列(三)——动态sql mybatis基础系列(二)——基础语法.别名.输入映射.输出映射 mybat ...
- mybatis plus使用redis作为二级缓存
建议缓存放到 service 层,你可以自定义自己的 BaseServiceImpl 重写注解父类方法,继承自己的实现.为了方便,这里我们将缓存放到mapper层.mybatis-plus整合redi ...
- Mybatis注解开发之@CacheNamespace:实现注解二级缓存的使用
MyBatis二级缓存使用: 官方建议在service使用缓存,但是你也可以直接在mapper层缓存,这里的二级缓存就是直接在Mapper层进行缓存操作 Mybatis的二级缓存实现也十分简单,只要在 ...
- 探索ASP.NET MVC5系列之~~~5.缓存篇(页面缓存+二级缓存)
其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...
- [原创]关于mybatis中一级缓存和二级缓存的简单介绍
关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...
- Hibernate+EhCache配置二级缓存
步骤: 第一步:加入ehcache.jar 第二步: 在src目录下新建一个文件,名为:ehcache.xml 第三步:在hibernate配置文件的<session-factory>下配 ...
- MyBatis 延迟加载,一级缓存,二级缓存设置
什么是延迟加载 resultMap中的association和collection标签具有延迟加载的功能. 延迟加载的意思是说,在关联查询时,利用延迟加载,先加载主信息.使用关联信息时再去加载关联信息 ...
随机推荐
- 初识python 之 smtplib 发送(dolphinscheduler任务监测)邮件
需求 监测dolphinscheduler调度系统,任务执行异常情况.如有异常,则发送邮件通知. 处理思路 因DS本身自带的邮件发送功能,不能正常发送邮件. 故而,通过查询DS源数据表,获取当前任务执 ...
- LINUX学习-Mysql集群-主从服务器备份
一.Mysql主从集群备份. 1.准备两台主机 主服务器:192.168.88.20和从服务器:192.168.88.30 2.分别安装mysql yum -y -install mysql mysq ...
- SSTI(以Twig模板引擎为例)
一.模板注入与常见Web注入 就注入类型的漏洞来说,常见 Web 注入有:SQL 注入,XSS 注入,XPATH 注入,XML 注入,代码注入,命令注入等等.注入漏洞的实质是服务端接受了用户的输入,未 ...
- 开源数据可视化BI工具SuperSet(使用)
上一篇介绍了Linux 下如何安装SuperSet ,本篇简单介绍一下如何使用 1.输入安装时设置的用户名密码登录控制台 2.控制界面如下 3.第一步添加数据源(已安装好的mysql) 点击 da ...
- leetcode 986. 区间列表的交集
问题描述 给定两个由一些 闭区间 组成的列表,每个区间列表都是成对不相交的,并且已经排序. 返回这两个区间列表的交集. (形式上,闭区间 [a, b](其中 a <= b)表示实数 x 的集合, ...
- Java集合-ArrayList源码分析
目录 1.结构特性 2.构造函数 3.成员变量 4.常用的成员方法 5.底层数组扩容原理 6.序列化原理 7.集合元素排序 8.迭代器的实现 9.总结 1.结构特性 Java ArrayList类使用 ...
- Java中的常用类——Arrays
数组工具类java.util.Arrays Arrays类中的方法都是static修饰的静态方法,因此可以直接使用类名.方法名来调用,而不用通过new使用对象来调用(是"不用"不是 ...
- 为什么JavaWeb要分层
首先bai让我们坐着时光机回到n年前的web开发.那个时候最早du都是静态的html页面,zhi后来有了数据库,有了所谓dao的动态页面,然后程序猿在编码的时候,会把所有的代码都写在页面上,包括数据库 ...
- golang中结构体标签在json中的应用
package main import ( "encoding/json" "fmt" "reflect" ) type Movie str ...
- 初步学习TypeScript
使用Visual Studio Code搭建TypeScript开发环境 1.TypeScript是干什么的 ? TypeScript是由微软Anders Hejlsberg(安德斯·海尔斯伯格,也是 ...