Redission实现分布式锁
String lockKey = "product_001";
//获取锁对象,并未加锁
RLock redissonLock = redisson.getLock(lockKey);
try {
// **此时加锁**,实现锁续命功能
redissonLock.lock();
int stock = Integer.parseInt(stringRedisTemplate.opsForValue().get("stock"));
if (stock > 0) {
int realStock = stock - 1;
stringRedisTemplate.opsForValue().set("stock", realStock + "");
System.out.println("扣减成功,剩余库存:" + realStock + "");
} else {
System.out.println("扣减失败,库存不足");
}
}finally {
//释放锁
redissonLock.unlock();
}
综上,设计实现分布式锁需要满足一下条件:
1、互斥性;在任意时刻,只有一个客户端能持有锁。
2、不能发生死锁;即使存在一个线程持有锁的期间崩溃而没有主动解锁,也能保证后续其他线程能加锁。
3、加锁和解锁必须是同一个线程。
该博客详细介绍了如何利用Redission来实现分布式锁,确保了锁的互斥性和防止死锁的能力。在示例代码中,展示了如何加锁、进行库存扣减操作以及在finally块中正确释放锁,确保了资源的安全操作。
3930

被折叠的 条评论
为什么被折叠?



