一、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
查看评论