Macula Boot Starter Redis

概览

该模块提供连接Redis的相关配置,使用了redisson库

组件坐标

<dependency>
    <groupId>dev.macula.boot</groupId>
    <artifactId>macula-boot-starter-redis</artifactId>
    <version>${macula.version}</version>
</dependency>

使用配置

使用时有两种方式配置,一种是spring-boot默认的配置形式,另一种是redisson的配置形式。如下所示:

属性默认值 / 行为说明
spring.data.redis.host / portlocalhost / 6379单机地址
spring.data.redis.database0数据库编号,Cluster 不支持切库
spring.data.redis.username / password未设置Redis 认证信息
spring.data.redis.timeout未设置时本模块使用 10000ms自动构造 Redisson 时用作建连超时
spring.data.redis.ssl.enabledfalse自动构造连接地址时启用 TLS
spring.data.redis.sentinel.master / nodes未设置Sentinel 主节点名称 / 哨兵地址列表
spring.data.redis.cluster.nodes未设置Cluster 节点地址列表
spring.redis.redisson.config未设置内嵌 Redisson YAML,优先于 file
spring.redis.redisson.file未设置Redisson YAML 资源路径

两种命名空间有意不同;显式 Redisson YAML 与 spring.data.redis.* 不会逐项合并。

spring:
  data:
    redis:
      database:
      host:
      port:
      password:
      ssl:
        enabled: false
      timeout:
      cluster:
        nodes:
      sentinel:
        master:
        nodes:

启用 spring.data.redis.ssl.enabled 时,单机、Sentinel 和 Cluster 地址都会使用 rediss://。 当前自动构建的 Redisson 配置不支持 Spring Boot SSL Bundle;如需自定义证书或信任库,请使用下面的 spring.redis.redisson YAML 配置并按 Redisson TLS 选项显式配置。

redisson的配置方式如下,包括单点、主从、集群,下面是集群模式:

Macula Boot 6.1 使用 Redisson 4,spring.redis.redisson.config 和 file 仅支持 Redisson YAML 格式; Redisson 4 已移除 JSON 配置解析。固定的 retryInterval 应迁移为 retryDelay,并显式选择延迟策略。

spring:
  redis:
    redisson:
      file: classpath:redisson.yaml  # file和config选一个
      config: |
        clusterServersConfig:
          idleConnectionTimeout: 10000
          connectTimeout: 10000
          timeout: 3000
          retryAttempts: 3
          retryDelay: !<org.redisson.config.EqualJitterDelay> {baseDelay: PT1S, maxDelay: PT2S}
          reconnectionDelay: !<org.redisson.config.EqualJitterDelay> {baseDelay: PT0.1S, maxDelay: PT10S}
          failedSlaveNodeDetector: !<org.redisson.client.FailedConnectionDetector> {}
          subscriptionsPerConnection: 5
          clientName: null
          loadBalancer: !<org.redisson.connection.balancer.RoundRobinLoadBalancer> {}
          subscriptionConnectionMinimumIdleSize: 1
          subscriptionConnectionPoolSize: 50
          slaveConnectionMinimumIdleSize: 24
          slaveConnectionPoolSize: 64
          masterConnectionMinimumIdleSize: 24
          masterConnectionPoolSize: 64
          readMode: "SLAVE"
          subscriptionMode: "SLAVE"
          nodeAddresses:
          - "redis://127.0.0.1:7004"
          - "redis://127.0.0.1:7001"
          - "redis://127.0.0.1:7000"
          scanInterval: 1000
          pingConnectionInterval: 0
          keepAlive: false
          tcpNoDelay: false
        password: null
        threads: 16
        nettyThreads: 32
        codec: !<org.redisson.codec.Kryo5Codec> {}
        transportMode: "NIO"

核心功能

默认提供的Bean

  • RedissonClient
  • RedissonRxClient
  • RedissonReactiveClient
  • RedissonConnectionFactory
  • RedisTemplate
  • StringRedisTemplate
  • ReactiveRedisTemplate
  • ReactiveStringRedisTemplate

多Redis源的配置-Redisson方式

首先需要在配置文件中添加:

spring:
  redis:
    redisson:
      one:
        file: classpath:redisson.yaml
        config: |
          xxxxx
      two:
        file: classpath:redisson.yaml
        config: |
          xxxxx

然后添加配置Bean,注意其中一个要设置@Primary注解,以便给默认的RedisConnectionFactory使用

public class Config {
    @Bean
    @ConfigurationProperties(prefix = "spring.redis.redisson.one")
    public RedissonProperties redissonPropertiesOne() {
        return new RedissonProperties();
    }

    @Primary
    @Bean(destroyMethod = "shutdown")
    public RedissonClient redissonClientOne(ApplicationContext ctx, RedissonProperties redissonPropertiesOne) throws Exception {
        Config config = RedissonConfigBuilder.create().build(ctx, null, redissonProperties);
        return Redisson.create(config);
    }

    @Bean
    @ConfigurationProperties(prefix = "spring.redis.redisson.tow")
    public RedissonProperties redissonPropertiesTwo() {
        return new RedissonProperties();
    }

    @Bean(destroyMethod = "shutdown")
    public RedissonClient redissonClientTwo(ApplicationContext ctx, RedissonProperties redissonPropertiesTwo) throws Exception {
        Config config = RedissonConfigBuilder.create().build(ctx, null, redissonProperties);
        return Redisson.create(config);
    }
}

多Redis源的配置-Redis方式

首先在配置文件中添加

spring:
  data:
    redis:
      one:
        xxx
      two:
        xxx

然后添加配置Bean,注意其中一个要设置@Primary注解,以便给默认的RedisConnectionFactory使用


@Configuration
public class Config {
    @Bean
    @ConfigurationProperties(prefix = "spring.data.redis.one")
    public DataRedisProperties redisPropertiesOne() {
        return new DataRedisProperties();
    }

    @Primary
    @Bean(destroyMethod = "shutdown")
    public RedissonClient redissonClientOne(ApplicationContext ctx, DataRedisProperties redisPropertiesOne)
        throws Exception {
        Config config = RedissonConfigBuilder.create().build(ctx, redisPropertiesOne, new RedissonProperties());
        return Redisson.create(config);
    }

    @Bean
    @ConfigurationProperties(prefix = "spring.data.redis.two")
    public DataRedisProperties redisPropertiesTwo() {
        return new DataRedisProperties();
    }

    @Bean(destroyMethod = "shutdown")
    public RedissonClient redissonClientTwo(ApplicationContext ctx, DataRedisProperties redisPropertiesTwo)
        throws Exception {
        Config config = RedissonConfigBuilder.create().build(ctx, redisPropertiesTwo, new RedissonProperties());
        return Redisson.create(config);
    }
}

依赖引入


<dependencies>
    <dependency>
        <groupId>org.redisson</groupId>
        <artifactId>redisson-spring-data-40</artifactId>
    </dependency>

    <dependency>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <artifactId>jackson-datatype-jsr310</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis-reactive</artifactId>
        <exclusions>
            <exclusion>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
            </exclusion>
            <exclusion>
                <groupId>io.lettuce</groupId>
                <artifactId>lettuce-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

版权说明

  • redisson:https://github.com/redisson/redisson/blob/master/LICENSE.txt
  • jackson:https://github.com/FasterXML/jackson-core/blob/master/LICENSE