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

  

然后开两个项目测试一下

可以看到没有重复的时间

 

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

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

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


posted on 2019-08-19 19:02  骨头酥  阅读(686)  评论(0编辑  收藏  举报

导航