本文主要记录使用SpringBoot整合Redisson的过程。按照文档,我使用redisson-spring-boot-starter来配置一个RedissonClient

配置 maven 依赖

redisson-spring-data模块与Spring Boot的版本匹配情况如下:

redisson-spring-data
module name
Spring Boot
version
redisson-spring-data-161.3.x
redisson-spring-data-171.4.x
redisson-spring-data-181.5.x
redisson-spring-data-202.0.x
redisson-spring-data-212.1.x
redisson-spring-data-222.2.x
redisson-spring-data-232.3.x
redisson-spring-data-242.4.x

由于我的项目中使用了SpringBoot 2.1.13.RELEASE,所以这里选择使用redisson-spring-boot-starter:3.14.0并指定使用redisson-spring-data-21子模块

    <!-- redis配置 start -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
        <version>2.1.13.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.redisson</groupId>
        <artifactId>redisson-spring-boot-starter</artifactId>
        <version>3.14.0</version>
        <!-- 默认集成的兼容SpringBoot 2.3.x版本,需要手动排除此依赖 -->
        <exclusions>
            <exclusion>
                <groupId>org.redisson</groupId>
                <artifactId>redisson-spring-data-23</artifactId> 
            </exclusion>
        </exclusions>
    </dependency>
    <!-- 手动添加此21版本,以兼容SpringBoot2.1.x版本 -->
    <dependency>
        <groupId>org.redisson</groupId>
        <artifactId>redisson-spring-data-21</artifactId>
        <version>3.14.0</version>
    </dependency>
    <!-- redis配置 end -->

项目配置

# application-dev.yaml
spring:
  redis:
    enable: true
    host: localhost # Redis服务器地址
    database: 0 # Redis数据库索引(默认为0)
    port: 6379 # Redis服务器连接端口
    password: # Redis服务器连接密码(默认为空)
    timeout: 300ms # 连接超时时间(毫秒)
    redisson:
      file: classpath:redisson.yaml
    jedis:
      pool:
        max-active: 8  # 连接池最大连接数(使用负值表示没有限制)
        max-wait: 800 # 连接池最大阻塞等待时间(使用负值表示没有限制)
        max-idle: 8 # 连接池中的最大空闲连接
        min-idle: 2 # 连接池中的最小空闲连接

为了方便配置,把redisson的配置文件拆分独立存放。

redisson 配置

# redisson.yaml
# 单节点配置
singleServerConfig:
  # 连接空闲超时,单位:毫秒
  idleConnectionTimeout: 10000
  # 连接超时,单位:毫秒
  connectTimeout: 10000
  # 命令等待超时,单位:毫秒
  timeout: 3000
  # 命令失败重试次数,如果尝试达到 retryAttempts(命令失败重试次数) 仍然不能将命令发送至某个指定的节点时,将抛出错误。
  # 如果尝试在此限制之内发送成功,则开始启用 timeout(命令等待超时) 计时。
  retryAttempts: 3
  # 命令重试发送时间间隔,单位:毫秒
  retryInterval: 1500
  # 密码
  password:
  # 单个连接最大订阅数量
  subscriptionsPerConnection: 5
  # 客户端名称
  clientName: qiyu-assistant
  #  # 节点地址
  address: redis://localhost:6379
  # 发布和订阅连接的最小空闲连接数
  subscriptionConnectionMinimumIdleSize: 1
  # 发布和订阅连接池大小
  subscriptionConnectionPoolSize: 50
  # 最小空闲连接数
  connectionMinimumIdleSize: 32
  # 连接池大小
  connectionPoolSize: 64
  # 数据库编号
  database: 0
  # DNS监测时间间隔,单位:毫秒
  dnsMonitoringInterval: 5000
# 线程池数量,默认值: 当前处理核数量 * 2
#threads: 0
# Netty线程池数量,默认值: 当前处理核数量 * 2
#nettyThreads: 0
# 编码
codec: !<org.redisson.codec.JsonJacksonCodec> {}
# 传输模式
transportMode : "NIO"

在代码中注入 RedissonClient

package com.example;

import org.redisson.api.RIdGenerator;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/")
public class IndexController {

    @Autowired
    private RedissonClient redissonClient;

    @GetMapping("/")
    public Long index() {
        RIdGenerator idGenerator = redissonClient.getIdGenerator("user_id");
        Long id = idGenerator.nextId();
        return id;
    }
}