mybatis的二级缓存,以及如何利用redis优化mybatis缓存?

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: mybatis的二级缓存,以及如何利用redis优化mybatis缓存?

学习redis,缓存是很重要的一块

1.1 为什么要使用缓存?

为mybatis增加缓存功能,可有利用减少数据库访问


系统运行的瓶颈很重要的一个因素就是数据库,

减少数据库的访问压力,可以提高整个系统的吞吐量。


什么是缓存?


将SQL语句,以及对应的查询结果存在服务器内存中,这一块内存存储区域,被我们称之为缓存。


如果之后再执行该同样的SQL语句,则直接从缓存中去取,不再去查询数据库,可减小数据库的访问压力。


缓存的核心使用思路


开启缓存

缓存的作用范围 缓存中的数据可以使用的范围

脏数据的处理

脏数据:缓存是数据库中热点数据的备份,当数据库中的热点数据发生变化时,缓存也要和数据库保持一致,否则相应的数据成为脏数据。

1.2 mybatis现有的缓存

mybatis的缓存分成一级缓存和二级缓存

一级缓存也称之为SqlSession级别的缓存,默认开启,只一次查询有效,作用范围太小,意义不大。

脏数据的处理 :执行增删改有可能造成脏数据,一旦执行增删改立刻清空缓存。


二级缓存称之为SqlSessionFactory级别的缓存,

通常我们所说的缓存默认指的就是二级缓存。


二级缓存使用步骤


  1. 开启二级缓存 (如果和spring整合,默认已经开启)
    若没有,要在mybatis-config.xml中配置一下信息:
<settings>
  <setting name = "cacheEnabled"  value="true" /> 
</settings>
  1. 在mapper文件增加 < cache/>

*Mapper.xml中配置:

<cache />

只有添加了cache标签的mapper文件中的查询结果才会放置到对应的二级缓存中

  1. 将需要存储到缓存中的对象实现序列化接口
  2. 二级缓存作用范围
    同1个namespace下
  3. 脏数据的处理
    执行同1个namespace下的增删改,自动清空该namespace下的缓存

内置的二级缓存通常也不用。

内置的二级缓存本身有namespace的问题,并且不支持持久化。

所以平时主要用:Ehcache 独立的缓存组件,使用纯Java编写。

准备工作:引入相关jar包 ehcache-core.jar mybatis-ehcache.jar

使用步骤:

  1. 开启 缓存,Config.xml中配置和上面一样
  2. mapper.xml中配置,cache标签要加一个type属性指向我们自定义的cache

src下添加ehcache.xml

  1. Encache作用于整个项目中 。
    对脏数据的处理:执行增删改,立刻清空缓存中的数据。

注意:低版本的mybatis配合ehcache有问题,需要升级mybatis到3.2以上

另外ehcache.xml 需要添加updateCheck=”false” 禁用检查更新

说了这么多,

如何使用redis优化mybatis缓存

mybatis已经实现了二级缓存,为什么使用redis对其优化???

mybatis本身二级缓存的查询结果要存储在当前服务器的JVM虚拟机中,如果缓存的数据量过大会造成jvm服务器臃肿缓慢,大量占用内存空间。


所以我们最好将缓存的数据从tomcat服务器上转移到redis服务器上,redis存取速度快,并且是一个独立进程和jvm没有关系。


实现步骤

  1. 添加jar包
  2. 在mapper文件中,增加自定义二级缓存的实现类配置
  3. 在src下,增加一个redis.properties配置文件,指明要连接redis数据库的ip和端口号

默认是连接本地的redis

总结:为了减少mysql数据库的查询压力,借助mybatis二级缓存,让多用户共享查询结果

前提执行的SQL语句是相同的。但是项目运行过程中,发现二级缓存存储的数据量越来越大,大量占用了当前JVM的空间,为了解决这个问题,使用redis数据库存储缓存的数据

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
1天前
|
缓存 NoSQL Java
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解、如何添加锁解决缓存击穿问题?分布式情况下如何添加分布式锁
这篇文章介绍了如何在SpringBoot项目中整合Redis,并探讨了缓存穿透、缓存雪崩和缓存击穿的问题以及解决方法。文章还提供了解决缓存击穿问题的加锁示例代码,包括存在问题和问题解决后的版本,并指出了本地锁在分布式情况下的局限性,引出了分布式锁的概念。
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解、如何添加锁解决缓存击穿问题?分布式情况下如何添加分布式锁
|
1天前
|
缓存 NoSQL Java
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
这篇文章是关于如何在SpringBoot应用中整合Redis并处理分布式场景下的缓存问题,包括缓存穿透、缓存雪崩和缓存击穿。文章详细讨论了在分布式情况下如何添加分布式锁来解决缓存击穿问题,提供了加锁和解锁的实现过程,并展示了使用JMeter进行压力测试来验证锁机制有效性的方法。
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
|
19天前
|
缓存 NoSQL 关系型数据库
(八)漫谈分布式之缓存篇:唠唠老生常谈的MySQL与Redis数据一致性问题!
本文来聊一个跟实际工作挂钩的老生常谈的问题:分布式系统中的缓存一致性。
76 10
|
5天前
|
存储 缓存 NoSQL
基于SpringBoot+Redis解决缓存与数据库一致性、缓存穿透、缓存雪崩、缓存击穿问题
这篇文章讨论了在使用SpringBoot和Redis时如何解决缓存与数据库一致性问题、缓存穿透、缓存雪崩和缓存击穿问题,并提供了相应的解决策略和示例代码。
18 0
|
5天前
|
缓存 NoSQL Ubuntu
如何在 Ubuntu 14.04 上配置 Redis 缓存以加速 WordPress
如何在 Ubuntu 14.04 上配置 Redis 缓存以加速 WordPress
12 0
|
4天前
|
Java 关系型数据库 MySQL
1、Mybatis-Plus 创建SpringBoot项目
这篇文章是关于如何创建一个SpringBoot项目,包括在`pom.xml`文件中引入依赖、在`application.yml`文件中配置数据库连接,以及加入日志功能的详细步骤和示例代码。
|
5天前
|
数据库
elementUi使用dialog的进行信息的添加、删除表格数据时进行信息提示。删除或者添加成功的信息提示(SpringBoot+Vue+MybatisPlus)
这篇文章介绍了如何在基于SpringBoot+Vue+MybatisPlus的项目中使用elementUI的dialog组件进行用户信息的添加和删除操作,包括弹窗表单的设置、信息提交、数据库操作以及删除前的信息提示和确认。
elementUi使用dialog的进行信息的添加、删除表格数据时进行信息提示。删除或者添加成功的信息提示(SpringBoot+Vue+MybatisPlus)
|
5天前
|
Java 数据库 Spring
MyBatisPlus分页插件在SpringBoot中的使用
这篇文章介绍了如何在Spring Boot项目中配置和使用MyBatis-Plus的分页插件,包括创建配置类以注册分页拦截器,编写测试类来演示如何进行分页查询,并展示了测试结果和数据库表结构。
MyBatisPlus分页插件在SpringBoot中的使用
|
5天前
|
Java 测试技术 数据库
mybatisPlus在Springboot中的使用
这篇文章详细介绍了如何在Spring Boot项目中集成和使用MyBatis-Plus框架,包括依赖配置、数据库设置、项目结构、实体类定义、启动类配置、Mapper接口编写以及通过单元测试进行的增删改查操作示例。
mybatisPlus在Springboot中的使用
|
5天前
|
Java 数据库连接 mybatis
基于SpringBoot+MyBatis的餐饮点餐系统
本文介绍了一个基于SpringBoot和MyBatis开发的餐饮点餐系统,包括系统的主控制器`IndexController`的代码实现,该控制器负责处理首页、点餐、登录、注册、订单管理等功能,适用于毕业设计项目。
13 0
基于SpringBoot+MyBatis的餐饮点餐系统