MybatisPlus二级缓存体系探究分析

目录
  • 一、序言
    • 1、前置条件
    • 2、目标与收获
  • 二、原理分析
    • 1、二级缓存
    • 2、缓存数据更新
    • 3、缓存的区别
  • 三、本地二级缓存
    • 1、两套API
    • 2、缓存实现类型

一、序言

本文承接[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二级缓存体系探究分析的详细内容,更多关于MybatisPlus二级缓存体系的资料请关注我们其它相关文章!

(0)

相关推荐

  • MybatisPlus开启、关闭二级缓存方法

    目录 一.开启MybatisPlus的全局配置: 二.在对应的xml文件中,添加配置: 三.如果有写接口无需二级缓存,可在对应的地方添加:useCache="false" 一.开启MybatisPlus的全局配置: #二级缓存 mybatis-plus.global-config.configuration.map-underscore-to-camel-case= true mybatis-plus.global-config.configuration.cache-enabled=

  • MybatisPlus自带的queryWrapper实现时间倒序方式

    目录 MybatisPlus自带queryWrapper时间倒序 使用queryWrapper解决字符串中含数字的排序问题 造成的原因 解决办法 MybatisPlus自带queryWrapper时间倒序 queryWrapper.select().orderByDesc("create_time"); 使用queryWrapper解决字符串中含数字的排序问题 今天遇到了Oracle数据库字符串(含数字)排序问题,这里记录的是如何用MyBatis-Plus的queryWrapper条件

  • MybatisPlus如何自定义TypeHandler映射JSON类型为List

    目录 自定义TypeHandler映射JSON类型为List 1. 实体类 2. ListTypeHandler 3. ReportUserListTypeHandler 4. Java 泛型 自定义TypeHandler的使用笔记 类型转换器还可以通过注解配置 java类型和jdbc类型 定义 使用 自定义TypeHandler映射JSON类型为List 1. 实体类 这里只展示需要映射的字段,分别在所需映射的字段和实体类上添加注解. @Data @TableName(value = "rep

  • MyBatisPlus使用@TableField注解处理默认填充时间的问题

    目录 使用@TableField注解处理默认填充时间的情况 1.利用数据库填写默认时间 2.使用自动填充默认填充插入或更新数据库时 给实体类的属性添加@TableField注解 测试 测试成功的结果状态 类型设置 使用@TableField注解处理默认填充时间的情况 在数据库的表中创建时间,修改时间!这些个操作一般都是自动化完成的,我们不希望手动更新. 阿里巴巴开发手册:所有的数据库表:gmt_create,gmt_modified几乎所有的表都要配置上!而且需要自动化! 1.利用数据库填写默认

  • MybatisPlus二级缓存体系探究分析

    目录 一.序言 1.前置条件 2.目标与收获 二.原理分析 1.二级缓存 2.缓存数据更新 3.缓存的区别 三.本地二级缓存 1.两套API 2.缓存实现类型 一.序言 本文承接[Mybatis缓存体系探究],提供基于MybatisPlus技术可用于生产环境下的二级缓存解决方案. 1.前置条件 掌握MyBatis二级缓存的原理 有关MyBatis缓存原理内容,参考[Mybatis缓存体系探究] 选择符合条件的MybatisPlus版本 本方案对MybatisPlus版本有严格的限制,使用版本不低

  • SpringBoot + Mybatis-plus实战之Mybatis-plus的一级缓存、二级缓存

    前言 现在的JAVA行业,貌似已经是SpringBoot + SpringCloud 的天下了,早期的SSH,SSM框架已经老去,与SpringBoot相结合的JPA框架虽然省去了很多的增删改查sql,但是比较笨拙,在面对一些复杂多变的逻辑时常常力不从心,而相对应的Mybatis由于其高度的灵活性受到广大JAVA攻城狮的欢迎.之前整合过了springboot+mybatis,前几天看到一个面试的问一个问题,Mybatis的一级缓存,二级缓存.我想这个应该也是一个重点吧,所以今天决定来详细解读一下

  • Mybatis-plus基于redis实现二级缓存过程解析

    1. mybatis-plus开启二级缓存 spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.jdbc.Driver jdbc-url: jdbc:mysql://192.168.222.155:3306/sys?serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true&

  • Mybatis的一级缓存和二级缓存原理分析与使用

    目录 Mybatis的一级缓存和二级缓存 1 Mybatis如何判断两次查询是完全相同的查询 2 二级缓存 2.1 二级缓存配置 2.2 二级缓存特点 2.3 配置二级缓存 2.4 测试 Mybatis的一级缓存和二级缓存 Mybatis会将相同查询条件的SQL语句的查询结果存储在内存或者某种缓存介质中,当下次遇到相同的SQL时不执行该SQL,而是直接从缓存中获取结果,减少服务器的压力,尤其是在查询越多.缓存命中率越高的情况下,使用缓存对性能的提高更明显. Mybatis缓存分为一级缓存和二级缓

  • MyBatis一级缓存与二级缓存原理与作用分析

    目录 缓存的作用 MyBatis 的缓存结构 一级缓存 二级缓存 缓存的作用 在 Web 系统中,最重要的操作就是查询数据库中的数据.但是有些时候查询数据的频率非常高,这是很耗费数据库资源的,往往会导致数据库查询效率极低,影响客户的操作体验.于是可以将一些变动不大且访问频率高的数据,放置在一个缓存容器中,用户下一次查询时就从缓存容器中获取结果. MyBatis 的缓存结构 MyBatis 系统中默认定义了两级缓存:一级缓存和二级缓存: MyBatis 一级缓存是一个 SqlSession 级别,

  • 详解Java的Hibernate框架中的缓存与二级缓存

    缓存 今天我们就来讲一下hibernate中实体状态和hibernate缓存.  1)首先我们先来看一下实体状态:  实体状态主要分三种:transient,persitent,detached.  看英文应该就大概明白了吧.  transient:是指数据还没跟数据库中的数据相对应.  persistent:是指数据跟数据库中的数据相对应,它的任何改变都会反映到数据库中.  detached:是指数据跟数据库中的数据相对应,但由于session被关闭,它所做的修改不会对数据库的记录造成影响.

  • SSH框架网上商城项目第16战之Hibernate二级缓存处理首页热门显示

    网上商城首页都有热门商品,那么这些商品的点击率是很高的,当用户点击某个热门商品后需要进入商品的详细信息页面,就像淘宝里面那样.那么每次点击都要去后台查询一下该商品的详细信息,就会发送相应的sql语句,每次刷新一下详细页面也会发sql语句,这样的话,性能肯定会受到很大的影响.那么使用Hibernate的二级缓存就可以解决这个问题. 有些人可能会想,我们可以使用重定向,这样的话,在用户第一次访问的时候把信息查出来放到session中,以后每次用户刷新就可以去session中拿了,这样就不用去数据库中

  • mybatis plus使用redis作为二级缓存的方法

    建议缓存放到 service 层,你可以自定义自己的 BaseServiceImpl 重写注解父类方法,继承自己的实现.为了方便,这里我们将缓存放到mapper层.mybatis-plus整合redis作为二级缓存与mybatis整合redis略有不同. 1. mybatis-plus开启二级缓存 mybatis-plus.configuration.cache-enabled=true 2. 定义RedisTemplate的bean交给spring管理,这里为了能将对象直接存取到redis中,

  • 聊聊Spring循环依赖三级缓存是否可以减少为二级缓存的情况

    基于Spring-5.1.5.RELEASE 问题 都知道Spring通过三级缓存来解决循环依赖的问题.但是是不是必须三级缓存才能解决,二级缓存不能解决吗? 要分析是不是可以去掉其中一级缓存,就先过一遍Spring是如何通过三级缓存来解决循环依赖的. 循环依赖 所谓的循环依赖,就是两个或则两个以上的bean互相依赖对方,最终形成闭环.比如"A对象依赖B对象,而B对象也依赖A对象",或者"A对象依赖B对象,B对象依赖C对象,C对象依赖A对象":类似以下代码: publ

随机推荐