spring-boot3连接Redis单机的四种配置方式

385 阅读1分钟

前提准备

引入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的配置

bedced2a45f8e98e73546c1b22f7e3c.png 8bba3b8fe694e0db999cb061d0f603b.png 解决办法:检查你的配置类是否使用@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。

以上只是个人观点,如有不对,欢迎交流