MybatisPlus二级缓存体系探究分析

作者:Java知识图谱 时间:2022-12-24 00:42:26 

一、序言

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

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等。

来源:https://www.cnblogs.com/javazhishitupu/p/15819799.html

标签:MybatisPlus,Mybatis,缓存
0
投稿

猜你喜欢

  • 一见钟情&一见如故

    2009-02-23 13:00:00
  • 使用python和Django完成博客数据库的迁移方法

    2022-05-16 03:58:25
  • JavaScript实现的背景自动变色代码

    2024-04-16 09:02:17
  • Javascript的promise,async和await的区别详解

    2024-04-22 22:43:48
  • 78行Python代码实现现微信撤回消息功能

    2021-12-17 17:41:19
  • 对Go语言中的context包源码分析

    2024-04-26 17:24:17
  • django将网络中的图片,保存成model中的ImageField的实例

    2023-12-23 01:11:33
  • Python利用pygame模块制作代码雨

    2021-02-13 02:53:24
  • Python解释器以及PyCharm的安装教程图文详解

    2021-04-09 11:56:32
  • Python的信号库Blinker用法详解

    2021-06-23 23:23:19
  • python中如何使用朴素贝叶斯算法

    2023-02-26 08:51:39
  • python binascii 进制转换实例

    2021-03-25 10:56:25
  • 详解python websocket获取实时数据的几种常见链接方式

    2023-09-20 08:22:23
  • 实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法

    2024-05-11 09:19:05
  • 将pandas.dataframe的数据写入到文件中的方法

    2022-07-13 14:56:38
  • Golang 实现interface类型转string类型

    2024-02-11 14:44:12
  • vue2.0+webpack环境的构造过程

    2024-05-08 10:42:00
  • 数据库技巧——MySQL十大优化技巧

    2011-01-31 16:44:00
  • python2与python3中关于对NaN类型数据的判断和转换方法

    2022-07-19 00:24:03
  • Python logging简介详解

    2022-05-12 09:27:02
  • asp之家 网络编程 m.aspxhome.com