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();
}
每一个实体类实现该接口
@Data
public class Account implements Serializable {
int id;
String username;
String password;
String role;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。