ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Redis做Mybatis的二级缓存

2022-07-25 14:32:53  阅读:156  来源: 互联网

标签:RedisMybatisCache String Object Redis id 二级缓存 template Mybatis public


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;
}

标签:RedisMybatisCache,String,Object,Redis,id,二级缓存,template,Mybatis,public
来源: https://www.cnblogs.com/buchizicai/p/16517243.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有