package com.dongpeng.rule.base.utils;
import javax.annotation.Resource;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
@Component
public class RedisLock {
@Resource
private RedisTemplate<String,String> redisTemplate;
public boolean lock(String key) {
long currentTime = System.currentTimeMillis();
if (redisTemplate.opsForValue().setIfAbsent(key, String.valueOf(currentTime))) {
return true;
}
String keyTime = redisTemplate.opsForValue().get(key);
if (StringUtils.isEmpty(keyTime)) {
if (redisTemplate.opsForValue().setIfAbsent(key, String.valueOf(currentTime))) {
return true;
}else {
return false; }
}
long keyCurrentTime = Long.parseLong(keyTime) + 3000;
/**
* 判断是否死锁
*/
if (keyCurrentTime < currentTime) {
redisTemplate.opsForValue().getOperations().delete(key);
if (redisTemplate.opsForValue().setIfAbsent(key, String.valueOf(currentTime))) {
return true;
}
}
return false;
}
public void unlock(String key) {
redisTemplate.opsForValue().getOperations().delete(key);
}
}
(adsbygoogle = window.adsbygoogle || []).push({});