zoukankan      html  css  js  c++  java
  • 用Redisson实现简单的分布式锁

    利用Redisson实现分布式锁是一个不错的解决方案


    Redisson是Redis的一个框架
    她对Redis扩展了一些功能,其中一个就是锁

    她的包
    <dependency>
        <groupId>org.redisson</groupId>
        <artifactId>redisson</artifactId>
        <version>3.10.6</version>
    </dependency>
    

      

    使用Config类配置redis的连接信息

    Config config = new Config();
    config.useSingleServer().setAddress("redis://localhost:6379");
    

      

    创建RedissonClient客户端

    RedissonClient redisson = Redisson.create(config);
    

      

    通过getLock()方法获取一个锁

    参数传锁的名字

    RLock lock = redisson.getLock("lock-test");
    

      

    用lock()方法开启锁

    第一个参数是锁的时间,第二个参数是对时间的描述,是秒、分钟、小时或者天

    她会在redis服务中创建一条key为lock-test的数据

    这条数据直到锁的时间结束,或者关闭锁,才会消失

    lock.lock(20, TimeUnit.SECONDS);
    

      

    用unlock()方法关闭锁

    lock.unlock();
    

      

    完整例子

    public static void main(String[] args) throws InterruptedException {
        Config config = new Config();
        config.useSingleServer().setAddress("redis://localhost:6379");
        RedissonClient redisson = Redisson.create(config);
        RLock lock = redisson.getLock("lock-test");
        while (true){
            lock.lock(20, TimeUnit.SECONDS);
            System.out.println(new Date());
            Thread.sleep(1000);
            lock.unlock();
        }
    }
    

      

    然后开两个项目测试一下

    可以看到没有重复的时间

    ------------------------------------------------------------------------------------------------------------------------------------------------------------

    以上是一个简单的例子,但是在实际开发中可不能这么写

    可以将其封装一下,提供注解,在一个代理中执行,会更妙!

    
    
  • 相关阅读:
    Linux基础命令---chfn
    第二十一课:js属性操作的兼容性问题
    jquery源码解析:jQuery工具方法Callbacks详解
    第二十课:js中如何操作元素的属性系统
    第十七课:js数据缓存系统的原理
    jquery源码解析:proxy,access,swap,isArraylike详解
    第十九课:盒子模型
    jquery源码解析:each,makeArray,merge,grep,map详解
    第十八课:js样式操作需要注意的问题
    下拉框插件的详解
  • 原文地址:https://www.cnblogs.com/gutousu/p/11378956.html
Copyright © 2011-2022 走看看