Spring Boot+Redis 分布式锁:模拟抢单
import org.redisson.Redisson;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import java.util.concurrent.TimeUnit;
public class RedisDistributedLockExample {
public static void main(String[] args) {
// 配置Redisson客户端
Config config = new Config();
config.useSingleServer().setAddress("redis://127.0.0.1:6379");
RedissonClient redisson = Redisson.create(config);
// 获取锁对象
RLock lock = redisson.getLock("lockKey");
try {
// 尝试获取锁,最多等待100秒,锁定之后最多持有锁10秒
boolean isLocked = lock.tryLock(100, 10, TimeUnit.SECONDS);
if (isLocked) {
// 业务逻辑
System.out.println("获取锁成功,执行业务逻辑");
// 模拟耗时操作
Thread.sleep(2000);
} else {
// 获取锁失败
System.out.println("获取锁失败,其他线程已获取锁");
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
// 释放锁
if (lock.isHeldByCurrentThread()) {
lock.unlock();
System.out.println("锁已释放");
}
}
// 关闭Redisson客户端
redisson.shutdown();
}
}
这段代码使用Redisson框架模拟了一个简单的抢单操作。它首先配置了Redisson客户端,然后尝试获取名为"lockKey"的锁。如果在指定的等待时间内获取到锁,则执行业务逻辑,并在完成后释放锁;如果未能获取锁,则输出相应信息,并在最后确保释放了Redisson客户端资源。
评论已关闭