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
目录
相关文章
|
14天前
|
缓存 NoSQL Java
Redis深度解析:解锁高性能缓存的终极武器,让你的应用飞起来
【8月更文挑战第29天】本文从基本概念入手,通过实战示例、原理解析和高级使用技巧,全面讲解Redis这一高性能键值对数据库。Redis基于内存存储,支持多种数据结构,如字符串、列表和哈希表等,常用于数据库、缓存及消息队列。文中详细介绍了如何在Spring Boot项目中集成Redis,并展示了其工作原理、缓存实现方法及高级特性,如事务、发布/订阅、Lua脚本和集群等,帮助读者从入门到精通Redis,大幅提升应用性能与可扩展性。
33 0
|
9天前
|
缓存 NoSQL 关系型数据库
MySQL与Redis缓存一致性的实现与挑战
在现代软件开发中,MySQL作为关系型数据库管理系统,广泛应用于数据存储;而Redis则以其高性能的内存数据结构存储特性,常被用作缓存层来提升数据访问速度。然而,当MySQL与Redis结合使用时,确保两者之间的数据一致性成为了一个重要且复杂的挑战。本文将从技术角度分享MySQL与Redis缓存一致性的实现方法及其面临的挑战。
30 2
|
9天前
|
存储 缓存 前端开发
缓存技术在软件开发中的应用与优化策略
缓存技术在软件开发中的应用与优化策略
|
11天前
|
Java 开发者 JavaScript
Struts 2 开发者的秘籍:隐藏的表单标签库功能,能否成为你下个项目的大杀器?
【8月更文挑战第31天】Struts 2表单标签库是提升Web页面交互体验的神器。它提供丰富的标签,如`&lt;s:textfield&gt;`和`&lt;s:select&gt;`,简化表单元素创建与管理,支持数据验证和动态选项展示。结合示例代码,如创建文本输入框并与Action类属性绑定,显著提升开发效率和用户体验。通过自定义按钮样式等功能,Struts 2表单标签库让开发者更专注于业务逻辑实现。
35 0
|
11天前
|
Java UED Maven
紧跟技术潮流:手把手教你构建响应式Vaadin应用,让用户体验无缝接轨!
【8月更文挑战第31天】本文从零开始,详细介绍如何使用强大的Java框架Vaadin构建流畅且响应式的Web应用程序。首先,确保安装JDK 1.8+、Maven 3.3.9+及IDE。接着,创建Maven项目并添加Vaadin依赖。然后,通过继承`UI`类创建主界面,并定义自定义主题与样式。利用Vaadin的响应式布局组件,如`HorizontalLayout`和`VerticalLayout`,实现多设备兼容性。
22 0
|
12天前
|
缓存 NoSQL 数据库
【超实用秘籍】FastAPI高手教你如何通过最佳实践构建高效Web应用:从代码组织到异步编程与缓存优化的全方位指南!
【8月更文挑战第31天】FastAPI凭借出色性能和易用性成为现代Web应用的首选框架。本文通过示例代码介绍构建高效FastAPI应用的最佳实践,包括开发环境搭建、代码模块化组织、异步编程及性能优化等。通过模块化设计和异步数据库操作,结合缓存技术,大幅提升应用性能与可维护性,助您轻松应对高并发场景。
22 0
|
14天前
|
缓存 NoSQL Java
惊!Spring Boot遇上Redis,竟开启了一场缓存实战的革命!
【8月更文挑战第29天】在互联网时代,数据的高速读写至关重要。Spring Boot凭借简洁高效的特点广受开发者喜爱,而Redis作为高性能内存数据库,在缓存和消息队列领域表现出色。本文通过电商平台商品推荐系统的实战案例,详细介绍如何在Spring Boot项目中整合Redis,提升系统响应速度和用户体验。
41 0
|
13天前
|
Java 数据库连接 测试技术
SpringBoot 3.3.2 + ShardingSphere 5.5 + Mybatis-plus:轻松搞定数据加解密,支持字段级!
【8月更文挑战第30天】在数据驱动的时代,数据的安全性显得尤为重要。特别是在涉及用户隐私或敏感信息的应用中,如何确保数据在存储和传输过程中的安全性成为了开发者必须面对的问题。今天,我们将围绕SpringBoot 3.3.2、ShardingSphere 5.5以及Mybatis-plus的组合,探讨如何轻松实现数据的字段级加解密,为数据安全保驾护航。
48 1
|
22天前
|
Web App开发 前端开发 关系型数据库
基于SpringBoot+Vue+Redis+Mybatis的商城购物系统 【系统实现+系统源码+答辩PPT】
这篇文章介绍了一个基于SpringBoot+Vue+Redis+Mybatis技术栈开发的商城购物系统,包括系统功能、页面展示、前后端项目结构和核心代码,以及如何获取系统源码和答辩PPT的方法。
|
27天前
|
Java 关系型数据库 MySQL
1、Mybatis-Plus 创建SpringBoot项目
这篇文章是关于如何创建一个SpringBoot项目,包括在`pom.xml`文件中引入依赖、在`application.yml`文件中配置数据库连接,以及加入日志功能的详细步骤和示例代码。