/**
* 上锁--自定义value,自定义时间,默认一分钟
* @param key
* @param value
* @return
*/
public boolean lock(String key, String value, int timeout) {
if(redisTemplate.opsForValue().setIfAbsent(key, value, timeout > 0 ? timeout : lockTimeout, TimeUnit.SECONDS)) {
return true;
}
Long expireTime = redisTemplate.opsForValue().getOperations().getExpire(key);
if (expireTime <= 0) {
redisTemplate.opsForValue().set(key, value, timeout > 0 ? timeout : lockTimeout, TimeUnit.SECONDS);
return true;
}
return false;
}
/**
* 上锁--自定义时间
* @param key
* @param timeout
* @return
*/
public String lockCustomTime(String key, int timeout) {
boolean lock = false;
if (timeout <= 0) {
return null;
}
String value = String.valueOf(System.currentTimeMillis());
lock = redisTemplate.opsForValue().setIfAbsent(key, value, timeout, TimeUnit.SECONDS);
if (!lock) {
Long expireTime = redisTemplate.opsForValue().getOperations().getExpire(key);
if (expireTime <= 0) {
redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS);
lock = true;
}
}
if (lock) {
return value;
}
return null;
}
/**
* 解锁
* @param key
* @param value
*/
public void unLock(String key, String value) {
String lockValue = (String) redisTemplate.opsForValue().get(key);
if (value.equals(lockValue)) {
redisTemplate.delete(key);
}
}
redis上锁解锁操作
最新推荐文章于 2024-07-11 00:09:47 发布