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();
        }
    }
    

      

    然后开两个项目测试一下

    可以看到没有重复的时间

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

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

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

    
    
  • 相关阅读:
    AOP
    session的一些原理
    HttpContext.Cache和Application的区别
    什么是COM组件
    MS—SQL数据库索引的应用
    会话状态(转)
    LINQ体验(6)——LINQ语句之Join和Order By(转)
    永远不停止学习,才是程序员最大的财富,欢迎加入CMS研究室
    面向对象
    从瀑布型开发到迭代型开发的转变
  • 原文地址:https://www.cnblogs.com/gutousu/p/11378956.html
Copyright © 2011-2022 走看看