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
  • 相关阅读:
    2018年左其盛读过评过的书(持续更新中)
    2星|《用场景营销引爆你的生意》:总共4个推荐案例,3个已经失败
    2018左其盛经管新书差评榜(持续更新中)
    3星|《十大全球CEO亲授企业高速成长的关键战略》:作为CEO,我也非常坦率地表明过家庭优先于工作
    2018左其盛好书榜(持续更新中)
    3星|《你的品牌需要一个讲故事的人》:有理论没案例
    《思考快与慢》前传,两位天才犹太心理学家的传奇人生与学术故事:4星|《思维的发现》
    C#如何在派生类中不显示父类的一些属性以及TypeDescriptor使用
    在XML里的XSD和DTD以及standalone的使用
    数据库操作之简单带参操作
  • 原文地址:https://www.cnblogs.com/callbin/p/14584859.html
Copyright © 2011-2022 走看看