使用org.redisson.api制作分布式锁

redis可以使用分布式锁的场景,redisson封装了该部分内容,下面看看怎么使用

复制代码
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

@Component
@Slf4j
public class RedisUtils {

    private static RedissonClient REDISSON_CLIENT;

    public RedisUtils(@Autowired RedissonClient redissonClient) {
        REDISSON_CLIENT = redissonClient;
    }

    /**
     * 尝试获取锁
     *
     * @param key 锁key
     * @param waitTime  最多等待时间,0:表示不等待,只尝试加锁一次
     * @param leaseTime 上锁后自动释放锁时间,-1:表示不自动释放锁
     * @return 获取锁成功返回true 失败返回false
     */
    public static boolean tryLock(String key, long waitTime, long leaseTime) {
        RLock lock = REDISSON_CLIENT.getLock(key);
        try {
            return lock.tryLock(waitTime, leaseTime, TimeUnit.SECONDS);
        } catch (InterruptedException e) {
            return false;
        }
    }

    public static void unlock(String key) {
        RLock lock = REDISSON_CLIENT.getLock(key);
        if (lock.isLocked() && lock.isHeldByCurrentThread()) {
            lock.unlock();
        } else {
            log.warn("redis锁已超时释放");
        }
    }

}
java 复制代码
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

@Component
@Slf4j
public class RedisUtils {

    private static RedissonClient REDISSON_CLIENT;

    public RedisUtils(@Autowired RedissonClient redissonClient) {
        REDISSON_CLIENT = redissonClient;
    }

    /**
     * 尝试获取锁
     *
     * @param key 锁key
     * @param waitTime  最多等待时间,0:表示不等待,只尝试加锁一次
     * @param leaseTime 上锁后自动释放锁时间,-1:表示不自动释放锁
     * @return 获取锁成功返回true 失败返回false
     */
    public static boolean tryLock(String key, long waitTime, long leaseTime) {
        RLock lock = REDISSON_CLIENT.getLock(key);
        try {
            return lock.tryLock(waitTime, leaseTime, TimeUnit.SECONDS);
        } catch (InterruptedException e) {
            return false;
        }
    }

    public static void unlock(String key) {
        RLock lock = REDISSON_CLIENT.getLock(key);
        if (lock.isLocked() && lock.isHeldByCurrentThread()) {
            lock.unlock();
        } else {
            log.warn("redis锁已超时释放");
        }
    }

}
相关推荐
风吹夏回14 天前
RabbitMQ 核心术语 + Python pika 方法完整讲解
分布式·python·rabbitmq
风吹夏回14 天前
RabbitMQ 三种模式入门:HelloWorld、WorkQueue、PubSub
分布式·rabbitmq·ruby
霸道流氓气质14 天前
分布式追踪与 RequestId 传播完全指南
分布式
cheems952714 天前
[RabbitMQ高级特性] 消息确认机制:从 Ready / Unacked 到 basicAck、basicReject、basicNack 的底层拆解
分布式·rabbitmq·ruby
枫华落尽14 天前
【Hadoop01-完全分布式运行模式】
分布式
隔壁阿布都14 天前
ShedLock 分布式定时任务锁框架介绍
spring boot·分布式
文艺倾年14 天前
【强化学习】数学推导专题,20W字总结(十五)
人工智能·分布式·大模型·强化学习·vibecoding
ACP广源盛1392462567314 天前
GSV9001S@ACP#1080P 级视频处理芯片,物理 AI 普及终端的高性价比选择
大数据·人工智能·分布式·嵌入式硬件·spark
guslegend14 天前
第1章:初始Kafka
分布式·kafka
ACP广源盛1392462567314 天前
GSV5600@ACP#多接口协议转换芯片,物理 AI 便携终端的互联核心
大数据·人工智能·分布式·嵌入式硬件·spark