zoukankan      html  css  js  c++  java
  • 基于Redis的redisson客户端实现分布式锁

    基于redisson实现分布式锁

    一、上官网 https://redisson.org/

    二、pom文件引入依赖

      

     <dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson</artifactId>
            <version>3.11.2</version>
        </dependency>

    三、如何使用,测试程序

      

    package com.example.redissonlock;
    
    import lombok.extern.slf4j.Slf4j;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.redisson.Redisson;
    import org.redisson.api.RLock;
    import org.redisson.api.RedissonClient;
    import org.redisson.config.Config;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    import java.util.concurrent.TimeUnit;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    @Slf4j
    public class RedissonLockApplicationTests {
    
        @Test
        public void contextLoads() {
        }
    
        @Test
        public void testRedissonLock() {
            Config config = new Config();
            config.useSingleServer().setAddress("redis://192.168.73.130:6379");
            RedissonClient redisson = Redisson.create(config);
    
            RLock rLock = redisson.getLock("order");
    
            try {
                rLock.lock(30, TimeUnit.SECONDS);
                log.info("我获得了锁!!!");
                Thread.sleep(10000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }finally {
                log.info("我释放了锁!!");
                rLock.unlock();
            }
        }
    
    }
    View Code

    四、Controller测试

    package com.example.redissonlock.controller;
    
    import lombok.extern.slf4j.Slf4j;
    import org.redisson.Redisson;
    import org.redisson.api.RLock;
    import org.redisson.api.RedissonClient;
    import org.redisson.config.Config;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.concurrent.TimeUnit;
    
    @RestController
    @Slf4j
    public class RedissonLockController {
        @Autowired
        private RedissonClient redisson;
    
        @RequestMapping("redissonLock")
        public String redissonLock() {
            RLock rLock = redisson.getLock("order");
            log.info("我进入了方法!!");
            try {
                rLock.lock(30, TimeUnit.SECONDS);
                log.info("我获得了锁!!!");
                Thread.sleep(10000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }finally {
                log.info("我释放了锁!!");
                rLock.unlock();
            }
            log.info("方法执行完成!!");
            return "方法执行完成!!";
        }
    }
    View Code

    五、 spring和springboot引入redisson

      1.上官网

       

    代码:

    <dependency>
             <groupId>org.redisson</groupId>
             <artifactId>redisson-spring-boot-starter</artifactId>
             <version>3.15.2</version>
         </dependency>

    配置文件 application.properties

    spring.redis.host=192.168.73.130

    Api 测试

    package com.example.redissonlock.controller;
    
    import lombok.extern.slf4j.Slf4j;
    import org.redisson.Redisson;
    import org.redisson.api.RLock;
    import org.redisson.api.RedissonClient;
    import org.redisson.config.Config;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.concurrent.TimeUnit;
    
    @RestController
    @Slf4j
    public class RedissonLockController {
        @Autowired
        private RedissonClient redisson;
    
        @RequestMapping("redissonLock")
        public String redissonLock() {
            RLock rLock = redisson.getLock("order");
            log.info("我进入了方法!!");
            try {
                rLock.lock(30, TimeUnit.SECONDS);
                log.info("我获得了锁!!!");
                Thread.sleep(10000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }finally {
                log.info("我释放了锁!!");
                rLock.unlock();
            }
            log.info("方法执行完成!!");
            return "方法执行完成!!";
        }
    }
    View Code
  • 相关阅读:
    asp.net笔记第一章
    数据库复习笔记
    tp5博客项目实战2
    springboot调整MybatisPlus全局的验证策略
    SpringBoot整合MybatisPlus,并实现新增、修改、删除、查看、分页
    springboot整合Apollo
    创建apollo项目,并发布配置
    Apollo部门管理
    搭建Apollo环境(Ubuntu-18.04.4)
    启动apollo时出现的问题,../demo.sh: 行 84: curl: 未找到命令
  • 原文地址:https://www.cnblogs.com/callbin/p/14584859.html
Copyright © 2011-2022 走看看