SpringBoot整合Redisson实战(通过redisson-spring-boot-starter)

作者: adm 分类: java 发布时间: 2021-08-26

SpringBoot整合Redisson有个比较好用的starter包就是redisson-spring-boot-starter,这也是官方比较推荐的配置方式,本文就使用redisson-spring-boot-starter来配置一个RedissonClient。

Maven依赖

<!--redisson-->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.13.6</version>
<exclusions>
<exclusion>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-data-23</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-data-21</artifactId>
<version>3.13.6</version>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

关于版本,直接去官网找下最新版即可,通过 redisson-spring-data-xx来适配spring的版本

上图就是适配spring2.x版本的配置;

PS: 这边也要引一下redis,redisson与redis在项目中都要用到

配置实践

edisson-spring-boot-starter这个包下只有3个类,源码比较易读,基本上看着代码就可以配置就可以了,这里就配置一套单节点的redis,采用.yml文件的格式;

上述的官网中给出了配置模板,所有的配置项都给出来了,这里给出一个比较简洁的实践:

application.yml 文件

spring.redis:
  enable: true
  # Connection URL, will override host, port and password (user will be ignored), e.g. redis://user:password@example.com:6379
  url: 配置你的地址
  timeout: 2000 # 连接或读取超时时长(毫秒)
  database: 7
  redisson:
    file: classpath:redisson.yml
  jedis:
    pool:
      max-active: 8  # 连接池最大连接数(使用负值表示没有限制)
      max-wait: 800 # 连接池最大阻塞等待时间(使用负值表示没有限制)
      max-idle: 8 # 连接池中的最大空闲连接
      min-idle: 2 # 连接池中的最小空闲连接

这里通过spring.redis.redisson.file 来指定redisson的配置文件名称,和redis的配置分开放,这样做的好处就是比较清晰

redisson.yml 文件

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

配置的时候是参照 Config.java 这个类配置的,这个类在 package org.redisson.config 下;如果你想配置集群模式的Redisson,就点 Config 的成员变量 ClusterServersConfig 去看下里边有哪些可配置项;

使用 RedissonClient

配置好后,就可以直接在项目中注入 RedissonClient 就可以了

样例如下:

@RestController
public class RedissonController {

@Autowired
private RedissonClient redissonClient;

@GetMapping(value = "/redisson/{key}")
public String redissonTest(@PathVariable("key") String lockKey) {
RLock lock = redissonClient.getLock(lockKey);
try {
lock.lock();
Thread.sleep(10000);
} catch (Exception e) {

} finally {
lock.unlock();
}

return "已解锁";
}
}

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!