@Autowired
private RedisTemplate redisTemplate;
/**
* 加锁(自动重试)
*
* @param key
* @param lockKeyType
* @return
*/
public boolean tryLock(String key, String lockKeyType) {
boolean flag = false;
try {
key = REDIS_LOCK_KEY_PREFIX + lockKeyType + key;
("加锁请求数据,key:{}", key);
long lockTimeout = 500 * 161;
long sleepTimeout = 500;
for (int i = 1; i <= 160; i++) {
flag = (key, lockTimeout);
if (flag) {
("{}加锁第{}次,成功", key, i);
break;
} else {
// ("{}加锁第{}次,失败", key, i);
(sleepTimeout);
}
}
if (flag) {
("{}加锁成功", key);
} else {
("{}加锁失败", key);
}
} catch (Exception e) {
();
}
return flag;
}
/**
* 加锁
* @param key
* @param lockKeyType
* @return
*/
public boolean lock(String key, String lockKeyType) {
key = REDIS_LOCK_KEY_PREFIX + lockKeyType + key;
("加锁请求数据,key:{}", key);
long lockTimeout = 1 * 1000;
boolean flag = (key, lockTimeout);
if (flag) {
("{}加锁成功", key);
} else {
("{}加锁失败", key);
}
return flag;
}
private boolean lockOnce(String key, long timeout) {
String value = key + "_"+();
boolean flag = ().setIfAbsent(key, value,
timeout, );
return flag;
}
/**
* 解锁
*
* @param key
* @param lockKeyType
*/
public void releaseLock(String key, String lockKeyType) {
key = REDIS_LOCK_KEY_PREFIX + lockKeyType + key;
("解锁请求数据,key:{}", key);
try {
(key);
("{}解锁成功", key);
} catch (Exception e) {
("{}解锁失败,{}", key, e);