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   作者:于春辉