Redis怎么实现分布式锁?

Redis怎么实现分布式锁

  可以使用Redis实现分布式锁

  redis命令:set users 10 nx ex 12 原子性命令

  示例代码如下:

//使用uuid,解决锁释放的问题
@GetMapping
public void testLock() throws InterruptedException {
String uuid = UUID.randomUUID().toString();
Boolean b_lock = redisTemplate.opsForValue().setIfAbsent("lock", uuid, 10, TimeUnit.SECONDS);
if(b_lock){
Object value = redisTemplate.opsForValue().get("num");
if(StringUtils.isEmpty(value)){
return;
}
int num = Integer.parseInt(value + "");
redisTemplate.opsForValue().set("num",++num);
Object lockUUID = redisTemplate.opsForValue().get("lock");
if(uuid.equals(lockUUID.toString())){
redisTemplate.delete("lock");
}
}else{
Thread.sleep(100);
testLock();
}
}

  备注:可以通过lua脚本,保证分布式锁的原子性。

申请14天超长免费试听资格
获取500G教程资料
姓名
电话
课程
立即申请