Redisson分布式锁

1.添加pom依赖

        <!--redisson-->
        <dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson</artifactId>
            <version>3.11.6</version>
        </dependency>

2.Redis配置文件

#系统配置,已省略其他无关配置参数
spring:
  redis:
    host: 192.168.0.167
    port: 6379
    password: helloworld

3.启动类配置Redisson

    /** 地址 **/
    @Value("${spring.redis.host}")
    private String host;
    /** 接口 **/
    @Value("${spring.redis.port}")
    private String port;
    /** 密码 **/
    @Value("${spring.redis.password}")
    private String password;
    /** redis数据库 **/
    private int database = 1;
    @Bean
    public Redisson redisson() {
        // 单机模式
        Config config = new Config();
        config.useSingleServer().setAddress("redis://" + host + ":" + port).setPassword(password).setDatabase(database);
        return (Redisson) Redisson.create(config);
    }

4.具体实现

public JsonResult createOrder(Map map) {
        //  锁key
        String key = "payOnline";
        //  是否加锁成功
        boolean res = false;
        //  设置锁
        RLock lock = redisson.getLock(key);
        try {
            //  加锁。成功true,失败false
            //  3秒加锁等待时间,若3秒内无法加锁,则返回false
            //  10秒后自动释放锁,若10秒内业务逻辑未执行完,通过内部监控自动续时,每次续时约1/3的自动释放锁时间,默认最多续时30秒
            res = lock.tryLock(3, 10, TimeUnit.SECONDS);
            if (res) {
                //  执行业务代码
                return new JsonResult(payOnline(map));
            } else {
                return JsonResult.fail("您的网络不稳定,请稍后重试。");
            }
        } catch (Exception e) {
            return JsonResult.fail("您的网络不稳定,请稍后重试。");
        } finally {
            if (res) { //  释放锁
                lock.unlock();
            }
        }
    }

 

原文地址:https://www.cnblogs.com/shiblog/p/12020092.html