redis分布式锁实现
Posted 旺仔哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis分布式锁实现相关的知识,希望对你有一定的参考价值。
/**
* 加锁
*/
public boolean lock(String key, String value)
//setIfAbsent相当于jedis中的setnx,如果能赋值就返回true,如果已经有值了,就返回false
//即:在判断这个key是不是第一次进入这个方法
if (redisTemplate.opsForValue().setIfAbsent(key, value))
//第一次,即:这个key还没有被赋值的时候
return true;
String current_value = redisTemplate.opsForValue().get(key);
if (!MyStringUtils.Object2String(current_value).equals("")
//超时了
&& Long.parseLong(current_value) < System.currentTimeMillis()) //①
String old_value = redisTemplate.opsForValue().getAndSet(key, value);//②
if (!MyStringUtils.Object2String(old_value).equals("")
&& old_value.equals(current_value))
return true;
return false;
//解锁
public void unlock(String key, String value)
try
if (MyStringUtils.Object2String(redisTemplate.opsForValue().get(key)).equals(value))
redisTemplate.opsForValue().getOperations().delete(key);
catch (Exception e)
e.printStackTrace();
以上是关于redis分布式锁实现的主要内容,如果未能解决你的问题,请参考以下文章