作用提升速度,保证多台服务器访问同一数据库时不会崩
注意:保证本地有下载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>
【记住:该类不可以注入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下的 } }
@Configuration public class MainConfiguration { @Resource RedisTemplate<Object, Object> template; @PostConstruct public void init(){ //把RedisTemplate给到RedisMybatisCache RedisMybatisCache.setTemplate(template); } }
//只需要修改缓存实现类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; }