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

      

    然后开两个项目测试一下

    可以看到没有重复的时间

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

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

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

    
    
  • 相关阅读:
    Codechef MSTONES Milestones
    Gym101620C Cumulative Code
    bootstrap组件-导出数据
    安装pip工具
    权限管理系统---django版本
    tornado 路由、模板语言、session
    django 连接mysql
    django 表结构
    ajax和原生ajax、文件的上传
    django的cookie和session
  • 原文地址:https://www.cnblogs.com/gutousu/p/11378956.html
Copyright © 2020-2023  润新知