redis分布式锁使用
方法说明:下面是获取步长ID的一个方法,要求同一时间只允许有一个线程执行,添加分布式redis锁实现
import com.je.cluster.RedisLock;
import com.je.core.service.MetaService;
import com.je.core.util.SpringContextHolder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.redis.core.RedisTemplate;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public static Map<String, Long> getNextDBId() {
Map<String, Long> dbIds = new HashMap<>();
RedisLock redisLock;
//创建一个锁的名字
String uniqueName = "wfnextdbid";
//logger.debug("集群模式,开始抢占{}任务锁!", uniqueName);
//因为是线程,通过注入的方式可能拿不到,所以通过spring的上下文拿到redis操作工具类,
RedisTemplate redisTemplate = SpringContextHolder.getBean("redisTemplate");
//定义一个redis分布式锁
redisLock = new RedisLock(uniqueName, redisTemplate);
//尝试上锁
boolean success = redisLock.lock();
//上锁失败,说明有其他线程正在使用,上锁成功继续执行
if (!success) {
//logger.debug("抢占{}任务锁失败!停止执行本机任务!", uniqueName);
return null;
}
try {
//实现自己的业务逻辑
return dbIds;
} catch (Exception e) {
e.printStackTrace();
} finally {
//解锁
redisLock.unlock();
return dbIds;
}
}
最后编辑: 于春辉 文档更新时间: 2024-08-21 10:58 作者:于春辉