Redis添加分布式锁

发布时间 2023-04-03 17:16:15作者: 人在代码在

1.不是高并发的场景

stringRedisTemplate.opsForValue.setIfAbsent("zql","人在代码在",10,TimeUnit.SECONDS);//只加过期限制

2.高并发的场景

如果加锁的过期时间小于业务执行时间,那么需要给每个线程的锁加这个线程的唯一标识,让每个线程的锁只能自己释放。

String clientId = UUID.randomUUID().tostring();

Boolean result = stringRedisTemplate.opsForValue.setIfAbsent("zql",clientId,10,TimeUnit.SECONDS);

if(!result){

return "error";

}

if(clientId.equals(stringRedisTemplate.opsForValue().get(zql))){

//释放锁

}

3.在2的基础上实现一个定时重置过期时间的功能。--锁续命

redisson实现:

 

redisson会在一个线程开启锁之后开启一个分线程,这个线程每过三分之一超时时间,重新set超时时间。