Redis实现分布式锁

基于Redisson

添加依赖

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

使用

public class RedissonTest {

    @Autowired
    private RedissonClient redissonClient;

    public void test() {
        RLock lock = redissonClient.getLock("key");
        try {
            // 上锁,默认30s过期,当业务代码没有处理完的时候会自动续期
            lock.lock();

            // 业务代码,
            Thread.sleep(40000);
            // todo
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 释放锁
            lock.unlock();
        }
    }
}

setnx

使用 SET key value [EX seconds] [PX milliseconds] NX 创建一个 key,这样就算加锁。其中:

NX :表示只有 key 不存在的时候才会设置成功,如果此时 redis 中存在这个 key ,那
么设置失败,返回 nil 。
EX seconds :设置 key 的过期时间,精确到秒级。意思是 seconds 秒后锁自动释
放,别人创建的时候如果发现已经有了就不能加锁了。
PX milliseconds :同样是设置 key 的过期时间,精确到毫秒级。

本文链接: https://jianz.xyz/index.php/archives/330/

1 + 5 =
快来做第一个评论的人吧~