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 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); } } }