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超时时间。
