package com.nq.common;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.stereotype.Component;
|
|
import java.util.concurrent.TimeUnit;
|
|
@Component
|
public class RedisLockService {
|
|
@Autowired
|
private RedisTemplate<String, String> redisTemplate;
|
|
/**
|
* 尝试获取分布式锁
|
*
|
* @param key 锁的key
|
* @param value 锁的value(可以使用UUID,这里简单使用固定值)
|
* @param expire 锁的过期时间,单位秒
|
* @return 是否获取成功
|
*/
|
public boolean tryLock(String key, String value, long expire) {
|
Boolean result = redisTemplate.opsForValue().setIfAbsent(key, value, expire, TimeUnit.SECONDS);
|
return Boolean.TRUE.equals(result);
|
}
|
|
/**
|
* 释放分布式锁
|
*
|
* @param key 锁的key
|
* @param value 锁的value
|
*/
|
public void unlock(String key, String value) {
|
String currentValue = redisTemplate.opsForValue().get(key);
|
if (currentValue != null && currentValue.equals(value)) {
|
redisTemplate.delete(key);
|
}
|
}
|
}
|