springboot2.7使用redis的redission组件实现分布式锁

添加pom.xml引用:

<!--redis-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!--redisson-->
        <dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson</artifactId>
            <version>${org.redisson.version}</version>
        </dependency>

application.yml配置:

redission:
      database2: true

是我另外加的,用于判断是否启用redission,这里redission使用第二个数据库

spring:
  redis:
    host: XXXX
    port: 6379
    password: XXXX
    database: 0
    redission:
      database2: true
    jedis:
      pool:
        # 连接池中的最大空闲连接
        max-idle: 50
        # 连接池最大连接数(使用负值表示没有限制)
        max-active: 500
        # 连接池最大阻塞等待时间(使用负值表示没有限制)
        max-wait: 300
        # 连接池中的最小空闲连接
        min-idle: 5
        #空闲对象逐出器线程的运行间隔时间.空闲连接线程释放周期时间
        time-between-eviction-runs: 1000

redis配置就省略不写了,

redission配置:

package com.gnetek.monitor.redis.config;

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Description redission配置
 * @Author Darren Huang
 * @Date 2024-03-14 8:51
 */
@Configuration
@ConditionalOnProperty(name = "spring.redis.redission.database2", havingValue = "true")
public class RedissionConfig {
    @Value("${spring.redis.host}")
    private String host;

    @Value("${spring.redis.port:6379}")
    private int port;

    @Value("${spring.redis.password:#{null}}")
    private String password;

    @Bean
    public RedissonClient redissonClient(){
        Config config = new Config();
        String redisUrl = String.format("redis://%s:%d", host, port);
        config.useSingleServer().setAddress(redisUrl).setPassword(password);
        config.useSingleServer().setDatabase(2);
        config.useSingleServer().setConnectionMinimumIdleSize(10);
        return Redisson.create(config);
    }

}

注入redissionClient:

// 注入 RedissonClient
    @Autowired
    RedissonClient redissonClient;

redissionClient的使用方法:

// 每个线程都创建自己的锁对象
        // 这是基于 Redis 实现的分布式锁
        Lock lock = this.redissonClient.getLock(id);
        try {
            // 上锁
            lock.lock();
            // 普通业务逻辑
            XXXService.addNumber();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 释放锁
            lock.unlock();
        }

法:

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值