1
zj
2025-09-19 35d3e4a47d1d308896c140f387c41154c4b81847
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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);
        }
    }
}