飞道的博客

一篇文章带你搞定 SpringBoot 整合 Redis

661人阅读  评论(0)

一、Redis 环境准备

学习过:学习 Redis 一篇文章就够了
学习过:Docker 的应用部署(Mysql,Tomcat,Nginx,Redis)

所以这里通过 docker 搭建 redis,实现与 SpringBoot的连接

连接成功:

二、SpringBoot 引入 redis 并测试

SpringBoot2.1.5及之后,远程连接redis,需要引入spring security,否则无法连接

(1)加入相关依赖

(2)设置 application.properties

#配置 redis
spring.redis.host=192.168.245.131
#redis 默认有16个库,指明你要用哪个库
spring.redis.database=0
spring.redis.port=6379
#我这里未设置密码,所以默认为空
#spring.redis.password=

(3)编写测试代码 HelloController

@RestController
public class HelloController {
    @Autowired
    StringRedisTemplate stringRedisTemplate;
    @GetMapping("/set")
    public void set(){
        ValueOperations<String, String> ops = stringRedisTemplate.opsForValue();
        ops.set("username","Yolo");
    }
    @GetMapping("/get")
    public void get(){
        ValueOperations<String, String> ops = stringRedisTemplate.opsForValue();
        System.out.println(ops.get("username"));
    }
}

(4)会发现设置 springsecurity 之后,登录连接会要求用户和密码登录:

(5)连接成功:

三、分析 SpringBoot 中 redis 的自动化配置类

当项目中引入 Spring Data Redis ,且配置了 Redis 的基本信息时,自动化配置会立即生效。

@Configuration
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class)
@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
public class RedisAutoConfiguration {
        @Bean
        @ConditionalOnMissingBean(name = "redisTemplate")
        public RedisTemplate<Object, Object> redisTemplate(
                        RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
                RedisTemplate<Object, Object> template = new RedisTemplate<>();
                template.setConnectionFactory(redisConnectionFactory);
                return template;
        }
        @Bean
        @ConditionalOnMissingBean
        public StringRedisTemplate stringRedisTemplate(
                        RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
                StringRedisTemplate template = new StringRedisTemplate();
                template.setConnectionFactory(redisConnectionFactory);
                return template;
        }
}

该配置类:
(1)在 RedisOperations 存在的情况下才会生效(即项目中引入了 Spring Data Redis)
然后导入在 application.properties 中配置的属性
(2)然后导入连接池信息(如果存在的话)
(3)提供了两个 Bean ,RedisTemplate 和 StringRedisTemplate ,其中 StringRedisTemplate 是 RedisTemplate 的子类,两个的方法基本一致,不同之处主要体现在操作的数据类型不同,

  • RedisTemplate 中的两个泛型都是 Object ,意味者存储的 key 和 value 都可以是一个对象
  • StringRedisTemplate 的 两个泛型都是 String ,意味者 StringRedisTemplate 的 key 和 value 都只能是字符串。
    如果开发者没有提供相关的 Bean ,这两个配置就会生效,否则不会生效。

转载:https://blog.csdn.net/nanhuaibeian/article/details/108095863
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场