SpringBoot整合Redisson操作单节点Redis

本文介绍了如何在SpringBoot应用中整合Redisson来操作Redis集群,包括依赖添加、配置设置、启动Redis以及测试加锁解锁功能。特别地,强调了Redisson在超时情况下的看门狗机制,能自动延长锁的有效期以确保业务的正常执行。
摘要由CSDN通过智能技术生成

关联文章:

文章中使用的是spring-boot整合redisson,对单节点的redis进行锁操作

1.添加Redisson

<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson-spring-boot-starter</artifactId>
    <version>3.14.0</version>
</dependency>

Redisson存在和Spring-Boot对应的版本,需要根据自己在项目中的Spring-Boot版本引入对应的 redisson版本

例如:文本中使用的Spring-Boot是2.2.x,那么根据对应需要使用redisson-spring-data-22所以需要先排除上述引入3.14.0中的redisson-spring-data-23,手动导入redisson-spring-data-22

<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson-spring-boot-starter</artifactId>
    <version>3.14.0</version>
    <exclusions>
<!--    如果引入的对象是网关getway,则需要同时排除redisson中的spring-boot-starter-web组件-->
<!--    <exclusion>-->
<!--         <groupId>org.springframework.boot</groupId>-->
<!--         <artifactId>spring-boot-starter-web</artifactId>-->
<!--    </exclusion>-->
        <exclusion>
            <groupId>org.redisson</groupId>
            <artifactId>redisson-spring-data-23</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson-spring-data-22</artifactId>
    <version>3.14.0</version>
</dependency>

2.添加yml配置项

spring:
  cloud:
    redis:
      # 数据库索引
      database: 0
      # 地址
      host: 127.0.0.1
      # 端口
      port: 6379
      # 密码
      password:
      # 连接超时时间
      timeout: 10s
      lettuce:
	    pool:
          # 连接池中的最小空闲连接
          min-idle: 0
          # 连接池中的最大空闲连接
          max-idle: 8
          # 连接池的最大数据库连接数
          max-active: 8
          # #连接池最大阻塞等待时间(使用负值表示没有限制)
          max-wait: -1ms
    redisson:
      config: |
        singleServerConfig:
		  idleConnectionTimeout: 10000
		  connectTimeout: 10000
		  timeout: 3000
		  retryAttempts: 3
		  retryInterval: 1500
		  subscriptionsPerConnection: 5
		  clientName: null
		  address: "redis://127.0.0.1:6379"
		  subscriptionConnectionMinimumIdleSize: 1
		  subscriptionConnectionPoolSize: 50
		  connectionMinimumIdleSize: 32
		  connectionPoolSize: 64
		  database: 0
		  dnsMonitoringInterval: 5000
		threads: 16
		nettyThreads: 32
		transportMode: "NIO"

更加详细的配置项可以参考官方github
注意在config配置项下首先是singleServerConfig项,该项表示redis为单节点

3.启动redis

文章中使用docker的方式启动redis,安装好docker后使用命令

docker run -d -p 6379:6379 --name redis redis

4.测试redisson锁

下面测试中先尝试获取名为myLock的锁,然后进行加锁操作,然后打印加所结果,之后模拟进行5s的业务逻辑操作后,释放锁。

@RestController
@RequestMapping("/test")
public class TestController {

    @Autowired
    private RedissonClient redissonClient;

    @RequestMapping("/getLock")
    public void getLock() throws InterruptedException {
        RLock rLock = redissonClient.getLock("myLock");
        try {
            boolean res = rLock.tryLock(0, TimeUnit.SECONDS);
            if(res) {
                System.out.println("getLock Success");
                Thread.sleep(5000);
            } else {
                System.out.println("getLock failure");
            }
            rLock.unlock();
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        }
    }
}

那么在加锁成功后我们可以进入redis容器使用命令查看锁
加锁成功
上图可以看到,加锁后默认会添加该锁的key,并且拥有30s的过期时间,但是如果在某些特殊情况下,我们业务处理时间会超过该时间,那么Redisson会怎么操作?
接着我们把线程睡眠时间改到60s或者更长,查看redis中锁的情况
在这里插入图片描述

如上图所示,Redisson内部提供了一个监控锁的看门狗,它的作用是在Redisson实例被关闭前,不断的延长锁的有效期。Redisson在每间隔10s的时候会重新刷新该锁的过期时间到30s直到我们的业务处理完成。
关于锁,更加详细的信息可以查看官方github

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值