Redis做Mybatis的二级缓存
2022/7/26 2:23:15
本文主要是介绍Redis做Mybatis的二级缓存,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Redis做mybatis的二级缓存
作用提升速度,保证多台服务器访问同一数据库时不会崩
注意:保证本地有下载redis且已经打开,否则无法使用。
【本文只讲述了实现步骤,并没有原理讲解】
保证有导入mybatis依赖和Redis依赖
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
创建cache包放入以下类
【记住:该类不可以注入bean,就是不能加注解@Bean】
//实现Mybatis的Cache接口 public class RedisMybatisCache implements Cache { //注意这里Cache导入的是ibatis的cache private final String id; private static RedisTemplate<Object, Object> template; //注意构造方法必须带一个String类型的参数接收id public RedisMybatisCache(String id){ this.id = id; } //初始化时通过配置类将RedisTemplate给过来 public static void setTemplate(RedisTemplate<Object, Object> template) { RedisMybatisCache.template = template; } @Override public String getId() { return id; } @Override public void putObject(Object o, Object o1) { //o就是Key,o1就是Value //这里直接向Redis数据库中丢数据即可,o就是Key,o1就是Value,60分钟为过期时间 template.opsForValue().set(o, o1, 60, TimeUnit.MINUTES); } @Override public Object getObject(Object o) { //这里根据Key直接从Redis数据库中获取值即可 return template.opsForValue().get(o); } @Override public Object removeObject(Object o) { //根据Key删除 return template.delete(o); } @Override public void clear() { //由于template中没封装清除操作,只能通过connection来执行 template.execute((RedisCallback<Void>) connection -> { //通过connection对象执行清空操作 connection.flushDb(); return null; }); } @Override public int getSize() { //这里也是使用connection对象来获取当前的Key数量 return template.execute(RedisServerCommands::dbSize).intValue(); //这里导的类是redis下的 } }
编写配置类config
@Configuration public class MainConfiguration { @Resource RedisTemplate<Object, Object> template; @PostConstruct public void init(){ //把RedisTemplate给到RedisMybatisCache RedisMybatisCache.setTemplate(template); } }
每个mapper上加入该注解
//只需要修改缓存实现类implementation为我们的RedisMybatisCache即可 @CacheNamespace(implementation = RedisMybatisCache.class) @Mapper public interface MainMapper { @Select("select name from student where sid = 1") String getSid(); }
每一个实体类实现该接口
(Redis存储对象时,是用序列化存储,所以select返回一个对象时会用到该接口)
@Data public class Account implements Serializable { int id; String username; String password; String role; }
这篇关于Redis做Mybatis的二级缓存的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24Redis资料:新手入门快速指南
- 2024-12-24Redis资料:新手入门教程与实践指南
- 2024-12-24Redis资料:新手入门教程与实践指南
- 2024-12-07Redis高并发入门详解
- 2024-12-07Redis缓存入门:新手必读指南
- 2024-12-07Redis缓存入门:新手必读教程
- 2024-12-07Redis入门:新手必备的简单教程
- 2024-12-07Redis入门:新手必读的简单教程
- 2024-12-06Redis入门教程:从安装到基本操作
- 2024-12-06Redis缓存入门教程:轻松掌握缓存技巧