/**
* 加锁
*/
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分布式锁实现
最新推荐文章于 2023-02-12 15:20:51 发布