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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容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
目录
相关文章
|
3天前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
6天前
|
缓存 NoSQL Redis
Redis 缓存使用的实践
《Redis缓存最佳实践指南》涵盖缓存更新策略、缓存击穿防护、大key处理和性能优化。包括Cache Aside Pattern、Write Through、分布式锁、大key拆分和批量操作等技术,帮助你在项目中高效使用Redis缓存。
61 22
|
5天前
|
缓存 NoSQL 中间件
redis高并发缓存中间件总结!
本文档详细介绍了高并发缓存中间件Redis的原理、高级操作及其在电商架构中的应用。通过阿里云的角度,分析了Redis与架构的关系,并展示了无Redis和使用Redis缓存的架构图。文档还涵盖了Redis的基本特性、应用场景、安装部署步骤、配置文件详解、启动和关闭方法、systemctl管理脚本的生成以及日志警告处理等内容。适合初学者和有一定经验的技术人员参考学习。
56 7
|
4天前
|
SQL 缓存 Java
MyBatis如何关闭一级缓存(分注解和xml两种方式)
MyBatis如何关闭一级缓存(分注解和xml两种方式)
21 5
|
6天前
|
缓存 监控 测试技术
如何利用浏览器的缓存来优化网站性能?
【10月更文挑战第23天】通过以上多种方法合理利用浏览器缓存,可以显著提高网站的性能,减少网络请求,加快资源加载速度,提升用户的访问体验。同时,要根据网站的具体情况和资源的特点,不断优化和调整缓存策略,以适应不断变化的业务需求和用户访问模式。
41 7
|
10天前
|
存储 缓存 监控
利用 Redis 缓存特性避免缓存穿透的策略与方法
【10月更文挑战第23天】通过以上对利用 Redis 缓存特性避免缓存穿透的详细阐述,我们对这一策略有了更深入的理解。在实际应用中,我们需要根据具体情况灵活运用这些方法,并结合其他技术手段,共同保障系统的稳定和高效运行。同时,要不断关注 Redis 缓存特性的发展和变化,及时调整策略,以应对不断出现的新挑战。
40 10
|
26天前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
81 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
26天前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
44 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
1月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
229 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
26天前
|
SQL Java 数据库连接
mybatis使用二:springboot 整合 mybatis,创建开发环境
这篇文章介绍了如何在SpringBoot项目中整合Mybatis和MybatisGenerator,包括添加依赖、配置数据源、修改启动主类、编写Java代码,以及使用Postman进行接口测试。
15 0
mybatis使用二:springboot 整合 mybatis,创建开发环境