RedissonClient 分布式锁


Spring Boot 提供了与 Redisson 整合的支持,Redisson 是一个 Redis 的 Java 客户端,提供了丰富的功能和灵活的 API。RLock 是 Redisson 提供的分布式锁接口,它扩展了 Java 的 Lock 接口,并提供了一些额外的方法用于分布式环境中的锁操作。

package com.xu.redis.task;

import cn.hutool.core.date.DateUtil;
import lombok.extern.log4j.Log4j2;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.Date;
import java.util.concurrent.TimeUnit;

/**
 * @author xuyq
 */
@Log4j2
@Component
@EnableScheduling
public class TestTask {

    @Resource
    private RedissonClient client;

    private final static String LOCKS = "DISTRIBUTED_LOCKS";

    @Scheduled(cron = "0/10 * * * * ?")
    public void test() {
        RLock lock = client.getLock(LOCKS);
        try {
            // 尝试1秒内获取锁,如果获取到了,最长60秒自动释放
            boolean tryLock = lock.tryLock(1L, 60L, TimeUnit.SECONDS);
            if (tryLock) {
                // TODO: 获取锁成功,处理业务
                System.out.println("获取锁成功" + DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
            }
        } catch (Exception e) {
            log.error("加锁异常!", e);
        } finally {
            if (lock.isLocked() && lock.isHeldByCurrentThread()) {
                lock.unlock();
            }
        }
    }

}
Logo

更多推荐