前提准备
引入spring-boot-starter-data-redis依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
如果使用Reactive Programming(响应式编程),请引入spring-boot-starter-data-redis
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis-reactive</artifactId>
</dependency>
Redis配置
问题1:无法使用application.yml修改Redis的配置
解决办法:检查你的配置类是否使用@Bean自定义配置了
RedisStandaloneConfiguration、LettuceConnectionFactory、RedisClusterConfiguration、RedisSentinelConfiguration如下情况:
@Bean
public LettuceConnectionFactory redisConnectionFactory() {
RedisStandaloneConfiguration serverConfig = new RedisStandaloneConfiguration("Ridisd 服务器IP地址“, 6379);
serverConfig.setPassword("redis密码");
return new LettuceConnectionFactory(serverConfig);
}
配置Redis的4钟方法
1.使用RedisTemplate 序列化默认为RedisSerializer
@Bean
RedisTemplate<String, String> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<String, String> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
return template;
}
key中文英文都会乱码,解决办法:
@Bean
public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {
RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(lettuceConnectionFactory);
// 设置key序列化方式string,RedisSerializer.string() 等价于 new StringRedisSerializer()
redisTemplate.setKeySerializer(RedisSerializer.string());
// 设置value的序列化方式json,使用GenericJackson2JsonRedisSerializer替换默认序列化,RedisSerializer.json() 等价于 new GenericJackson2JsonRedisSerializer()
redisTemplate.setValueSerializer(RedisSerializer.json());
// 设置hash的key的序列化方式
redisTemplate.setHashKeySerializer(RedisSerializer.string());
// 设置hash的value的序列化方式
redisTemplate.setHashValueSerializer(RedisSerializer.json());
// 使配置生效
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
2.使用ReactiveStringRedisTemplate 序列化默认为StringRedisSerializer(响应式编程)
@Bean
ReactiveStringRedisTemplate reactiveRedisTemplate(ReactiveRedisConnectionFactory factory) {
return new ReactiveStringRedisTemplate<>(factory);
}
底层实现和方法1解决乱码问题方法一样
public ReactiveStringRedisTemplate(ReactiveRedisConnectionFactory connectionFactory) {
this(connectionFactory, RedisSerializationContext.string());
}
string()底层实现
static RedisSerializer<String> string() {
return StringRedisSerializer.UTF_8;
}
3.使用ReactiveRedisTemplate 序列化默认为StringRedisSerializer(响应式编程)
@Bean
ReactiveRedisTemplate<String, String> ReactiveRedisTemplate(ReactiveRedisConnectionFactory connectionFactory) {
return new ReactiveRedisTemplate<>(connectionFactory, RedisSerializationContext.string());
}
4.使用StringRedisTemplate 序列化默认为StringRedisSerializer
@Bean
StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
总结
Spring Boot3整合Redis单机的配置方式推荐使用ReactiveRedisTemplate和StringRedisTemplate,如果决定使用响应式编程那么推荐使用ReactiveRedisTemplate。
以上只是个人观点,如有不对,欢迎交流