引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <version>2.7.18</version>
</dependency>
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson-spring-boot-starter</artifactId>
    <version>3.17.6</version>
</dependency>

官方的 redisson springboot 自动配置类(org.redisson.spring.starter.RedissonAutoConfiguration),读取的配置前缀是 spring.redis.redisson

看一下自动配置创建 redisson 实例的逻辑 org.redisson.spring.starter.RedissonAutoConfiguration#redisson

    @Bean(destroyMethod = "shutdown")
    @ConditionalOnMissingBean(RedissonClient.class)
    public RedissonClient redisson() throws IOException {
        Config config = null;
        Method clusterMethod = ReflectionUtils.findMethod(RedisProperties.class, "getCluster");
        Method timeoutMethod = ReflectionUtils.findMethod(RedisProperties.class, "getTimeout");
        Object timeoutValue = ReflectionUtils.invokeMethod(timeoutMethod, redisProperties);
        // 从 spring.redis 取超时配置值
        int timeout;
        if(null == timeoutValue){
            timeout = 10000;
        }else if (!(timeoutValue instanceof Integer)) {
            Method millisMethod = ReflectionUtils.findMethod(timeoutValue.getClass(), "toMillis");
            timeout = ((Long) ReflectionUtils.invokeMethod(millisMethod, timeoutValue)).intValue();
        } else {
            timeout = (Integer)timeoutValue;
        }

        if (redissonProperties.getConfig() != null) {
            // 填写了 spring.redis.redisson.config,则读取字符串直接加载
            try {
                config = Config.fromYAML(redissonProperties.getConfig());
            } catch (IOException e) {
                try {
                    config = Config.fromJSON(redissonProperties.getConfig());
                } catch (IOException e1) {
                    throw new IllegalArgumentException("Can't parse config", e1);
                }
            }
        } else if (redissonProperties.getFile() != null) {
            // 填写了 spring.redis.redisson.file,则从配置文件中加载配置
            ...
            ...
        } else if (redisProperties.getSentinel() != null) {
            // 哨兵配置
            ...
            ...
        } else if (clusterMethod != null && ReflectionUtils.invokeMethod(clusterMethod, redisProperties) != null) {
            // 配置了集群配置项,则使用集群方式
            ...
            ...
        } else {
            // 没有额外配置 spring.redis.redisson.config / file,不是集群模式,也不是哨兵模式,则生成默认配置
            config = new Config();
            String prefix = REDIS_PROTOCOL_PREFIX;
            Method method = ReflectionUtils.findMethod(RedisProperties.class, "isSsl");
            if (method != null && (Boolean)ReflectionUtils.invokeMethod(method, redisProperties)) {
                prefix = REDISS_PROTOCOL_PREFIX;
            }
            // 使用单redis服务方式连接
            // redis连接地址、database、密码从 spring.redis 中获取
            config.useSingleServer()
                .setAddress(prefix + redisProperties.getHost() + ":" + redisProperties.getPort())
                .setConnectTimeout(timeout)
                .setDatabase(redisProperties.getDatabase())
                .setPassword(redisProperties.getPassword());
        }
        if (redissonAutoConfigurationCustomizers != null) {
            for (RedissonAutoConfigurationCustomizer customizer : redissonAutoConfigurationCustomizers) {
                customizer.customize(config);
            }
        }
        return Redisson.create(config);
    }

默认 redisson 是从 redis 取连接参数去创建,如果想单独设置 redisson 的连接参数,那么可以填写 spring.redis.redisson.config(字符串方式的配置) 或 spring.redis.redisson.file(指定配置文件路径)

对于 spring.redis.redisson.config 这个参数,它只接收字符串的值,所以在写 yaml 配置时,需要改成下面这种形式,| 表示多行字符串

这个例子是将 redisson 线程数改小

spring:
  redis:
    host: 127.0.0.1
    port: 6379
    # 密码(如没有密码请注释掉)
    # password:
    database: 5
    timeout: 10s
    ssl: false
    # redisson 配置
    redisson:
      config: |
        # 线程数量
        threads: 4
        # Netty线程数量
        nettyThreads: 8
        # 单服务配置
        singleServerConfig:
          connectTimeout: 10000
          address: "redis://${spring.redis.host}:${spring.redis.port}"
          database: ${spring.redis.database}
          password: ${spring.redis.password:}