lockKey:商品标识
value:当前线程标识
1.确保每把锁同一时间能且仅能上一次
setnx(set if not exists):当锁不存在时才上锁
redisTemplate.opsForValue().setIfAbsent(lockKey,value)
没加上锁需要返回错误码 直接让其重试
2.上锁成功后,需要在之后将锁释放
redisTemplate.delete(lockKey)
3.需要考虑拿到锁以后,中途有可能抛异常,从而死锁,别人再也拿不到锁
try{}catch{}finally{redisTemplate.delete(lockKey)}
4.需要考虑服务器宕机或者停电或者内存不够杀进程等等诸多物理因素,导致整个jar包停掉了,此时其他服务器上的jar包依然上正常的,可是,这样也有可能死锁
设置过期时间
redisTemplate.opsForValue().setIfAbsent(lockKey,value)
--->
redisTemplate.opsForValue().setIfAbsent(lockKey,value,10,TimeUnit.SECONDS)
5.如果过期时间过了,别人拿到锁了,但是自身没有走完所有代码,然后删除锁的时候,要确保不能删掉别人的锁
redisTemplate.delete(lockKey)
--->
value--->clientID
clientID = UUID.randomUUID().toString()
if(clientID.equals(redisTemplate.opsForValue().get(lockKey)))
{
redisTemplate.delete(lockKey)
}
Redisson
标签:opsForValue,redis,value,setIfAbsent,注意事项,delete,lockKey,redisTemplate,分布式 From: https://www.cnblogs.com/dengliang356a/p/17508140.html