MyBatis 使用 Redis 缓存
2023-09-11 14:18:27 时间
1. 前言
在上一文中,我们介绍了 MyBatis 的多级缓存。MyBatis 的二级缓存可在多个会话中共享缓存,但是这也加大了内存的使用空间,如果二级缓存空间占有量过多势必会导致程序运行空间的不足,因此我们需要将二级缓存转移到专业的缓存服务器上。
Redis 是一个高性能的 kv 数据库,被广泛的使用在缓存服务上,MyBatis 项目开发者提供了 Redis 缓存的实现。本小节我们将一起来学习如何在 MyBatis 中集成 Redis 缓存。
2. 准备
2.1 添加依赖
在项目的 pom.xml 文件中添加上 mybatis-redis 依赖:
<dependency>
<groupId>org.mybatis.caches</groupId>
<artifactId>mybatis-redis</artifactId>
<version>1.0.0-beta2</version>
</dependency>
mybatis-redis 目前还只有 beta 版,相信不久后就可以到正式版了。
2.2 Redis服务器
请确保你拥有一台可用的 Redis 服务器,并能够正常运行。如下:
127.0.0.1:6379> ping
PONG
2.3 Redis配置文件
在 src/main/resources 目录下新增 redis.properties 配置文件,并向其中添加如下配置:
host=localhost
port=6379
connectionTimeout=5OOO
soTimeout=5OOO
password=123456
database=O
clientName=
注意,请根据自己的环境来修改配置,如密码和主机。
3. 使用
3.1 配置
在对应的 mapper 配置文件中,如 UserMapper.xml 文件添加上对应的缓存配置。如下:
<cache type="org.mybatis.caches.redis.RedisCache" />
3.2 调用
配置好以后,我们就可以直接在程序中调用了。
SqlSession session1 = sqlSessionFactory.openSession();
UserMapper userMapper1 = session1.getMapper(UserMapper.class);
User user1 = userMapper1.selectUserById(1);
System.out.println(user1);
SqlSession session2 = sqlSessionFactory.openSession();
UserMapper userMapper2 = session2.getMapper(UserMapper.class);
User user2 = userMapper2.selectUserById(1);
System.out.println(user2);
注意,User 对象必须实现Serializable
接口才可被缓存。 比如:
public class User implements Serializable {}
当缓存成功,程序会有如下输出,表示缓存击中。
20:58:12.462 [main] DEBUG com.5axxw.mybatis.mapper.UserMapper - Cache Hit Ratio [com.5axxw.mybatis.mapper.UserMapper]: 1.0
User{id=1, username='peter', age=18, score=100}
20:58:12.499 [main] DEBUG com.5axxw.mybatis.mapper.UserMapper - Cache Hit Ratio [com.5axxw.mybatis.mapper.UserMapper]: 1.0
User{id=1, username='peter', age=18, score=100}
提示: 在第一次运行时,会向 Redis 中存放数据,不会使用到缓存,第二次运行时则才会使用到缓存。
4. 小结
- Redis 缓存十分常见,MyBatis 集成 Redis 缓存也异常方便,但是在实际生产环境下如此应用的都不多,而是直接选择其它方式来使用 Redis 缓存。
相关文章
- 使用redis限制ip访问次数
- Redis安装完后redis-cli无法使用(redis-cli: command not found)
- Mybatis+mysql动态分页查询数据案例——Mybatis的配置文件(mybatis-config.xml)
- C# servicestack.redis 互通 java jedis
- yii2:redis调用
- 【高并发简单解决方案】redis队列缓存 + mysql 批量入库 + php离线整合
- Redis配置文件详解(redis.conf)
- redis 简单整理——复制配置[二十二]
- spring boot单元测试之十:用embedded-redis库做Redis的mock(spring boot 2.4.3)
- Redis 聊聊主从复制需要注意的几个方面
- k8s 安装redis-operator并以operator方式部署redis-standalone redis-cluster集群完整操作记录
- Docker搭建Redis高可用集群(基于redis-sentinel)
- Atitit mysql redis mongodb 性能指标 目录 1.1. 二、 性能比较1 1.2. 性能极高- Redis能读的速度是110000次/s,写的速度是81000次/s2 1
- 【MyBatis笔记10】Mybatis中几个动态SQL标签和内置参数
- ASP.NET Core微服务(六)——Redis效率与sqlserver数据库对比
- MyBatis快速入门——第五章、maven整合Mybatis&Servlet_tomcat
- 〖Python 数据库开发实战 - Python与Redis交互篇②〗- 利用 redis-py 实现字符串类型的常用指令操作
- 〖Python 数据库开发实战 - Python与Redis交互篇⑥〗- redis-py 的事务函数
- 〖Python 数据库开发实战 - Python与Redis交互篇⑪〗- 综合案例 - 新闻管理系统 - 缓存新闻数据至redis
- Redis主从复制模式原理及演进
- C/C++编程操作Redis数据库,hiredis包装redis数据库操作接口及测试(增删改查与连接)
- 【最详细】最新最全Redis面试大全(50道)
- 【redis】Redis为什么能抗住10万并发?
- Mybatis源码分析之(六)mybatis拦截器(Interceptor)的实现原理