package com.xdap.self_development.utils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

@Component
public class RedisLockUtils {

    @Autowired
    private StringRedisTemplate redisTemplate;

    /**
     * 获取分布式锁
     * @param key 锁的键（如 "task:lock:任务ID"）
     * @param value 锁的持有者（如用户名）
     * @param expire 过期时间（避免死锁）
     * @param unit 时间单位
     * @return 是否获取成功
     */
    public boolean tryLock(String key, String value, long expire, TimeUnit unit) {
        return Boolean.TRUE.equals(redisTemplate.opsForValue().setIfAbsent(key, value, expire, unit));
    }

    /**
     * 释放锁（需校验持有者，避免误释放）
     * @param key 锁的键
     * @param value 锁的持有者
     */
    public void unlock(String key, String value) {
        String currentValue = redisTemplate.opsForValue().get(key);
        if (value.equals(currentValue)) {
            redisTemplate.delete(key);
        }
    }
}
