RedissonClient 分布式锁
Spring Boot 提供了与 Redisson 整合的支持,Redisson 是一个 Redis 的 Java 客户端,提供了丰富的功能和灵活的 API。RLock 是 Redisson 提供的分布式锁接口,它扩展了 Java 的 Lock 接口,并提供了一些额外的方法用于分布式环境中的锁操作。
·
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();
}
}
}
}
更多推荐
所有评论(0)