@Component
public class RedisLockUtil {
@Autowired
private StringRedisTemplate stringRedisTemplate;
/**
* Redis加锁的操作
*
* @param lockName 锁key
* @param lockKey key值
* @param lockTime 锁时间(单位秒)
*/
public synchronized Boolean tryLock(String lockName, String lockKey, long lockTime) {
return parseBoolean(stringRedisTemplate.opsForValue().setIfAbsent(lockName, lockKey)) &&
parseBoolean(stringRedisTemplate.expire(lockName, lockTime, TimeUnit.SECONDS));
}
public static boolean parseBoolean(Boolean booleanUnboxed) {
return null != booleanUnboxed && booleanUnboxed;
}
/**
* Redis解锁的操作
*
* @param lockName 锁key
* @param lockKey Key值
*/
public synchronized void unlock(String lockName, String lockKey) {
ValueOperations<String, String> operations = stringRedisTemplate.opsForValue();
if (lockKey.equals(operations.get(lockName))) {
stringRedisTemplate.opsForValue().getOperations().delete(lockName);
}
}
}