MyBatis的二级缓存整合redis

MyBatis 自带的二级缓存存在的问题

在前面我们使用 @CacheNamespace​ 实现了 430.MyBatis的二级缓存 ,这个底层使用 HashMap​ 来实现。在 单机环境 下没有问题,但是在 分布式环境 下就不行了。


Terwer...大约 2 分钟MyBatis后端开发开源框架二级缓存使用问题加上环境
MyBatis的二级缓存

二级缓存的原理

二级缓存的原理和一级缓存一样,第一次查询会将数据放到缓存中,然后第二次查询直接去缓存读取。

但是一级缓存是基于 SqlSession 的,二级缓存是基于 mapper 的 namespace 的。

也就是说,多个 SqlSession 可以共享同一个二级缓存区域。如果两个 mapper 的 namespace 相同,那么即使是两个 mapper,这两个 mapper 执行 sql 查询的数据也将保存在相同的二级缓存区域中。


Terwer...大约 3 分钟MyBatis后端开发开源框架二级缓存mybatis
MyBatis缓存的概念

缓存回顾

缓存就是内存中的数据,常常来自对数据库查询结果的保存。

使用缓存可以避免频繁与数据库交互,进而提高响应速度。

MyBatis 对缓存的支持

MyBatis 也提供了对缓存的支持,分为 一级缓存二级缓存。可以用下面的图来理解:

  1. 一级缓存是 SqlSession 级别的缓存。在操作数据库时,需要构造 SqlSession 对象,在对象中有一个 HashMap 的数据结构用于存储缓存数据。不同的 SqlSession 之间缓存的数据区域(HashMap)是不同的。
  2. 二级缓存是 Mapper 级别的缓存。多个 SqlSession 操作同一个 Mapper 的 sql 语句,多个 SqlSession 可以共用二级缓存,二级缓存是跨 SqlSession 的。

Terwer...大约 1 分钟MyBatis后端开发开源框架缓存二级缓存数据库数据mybatis一级缓存