redis分布式锁

public String redisStock() throws InterruptedException{

String lockKey="mylock";

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

 

Try{

//获取锁,相当于jedis. setnx (key, value) 保证了原子性,保证获取锁的同时加入了超时时间。

防止获取锁的时候程序出现意外并没有设置超时时间,导致死锁,锁无法释放

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

 

if (! result){return "error";}

//具体业务操作代码

} finally {

//确保高并发下,每个线程正确释放自己的锁

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

//释放锁

stringRedisTemplate.delete(lockKey);}}

return "OK";}

posted on 2020-02-15 19:40  Lost光头  阅读(76)  评论(0编辑  收藏  举报