基于Redis的Redisson分布式可重入锁实现了java.util.concurrent.locks.Lock接口

Redisson 锁的种类有以下几种:可重入锁,公平锁,联锁,红锁,读写锁,接下来我们详细介绍一下每一种锁。

  • 可重入锁

    一个线程在执行一个带锁的方法,该方法中又调用了另一个需要相同锁的方法,则该线程可以直接执行调用的方法,而无需重新获得锁。

        public void method1() {RLock lock = redissonClient.getLock("lock");try {lock.lock();method2();} finally {lock.unlock();}System.out.println("释放锁成功");}public void method2() {RLock lock = redissonClient.getLock("lock");try {if (lock.tryLock()) {System.out.println("加锁成功");//业务逻辑}} finally {lock.unlock();}}
  • 公平锁 

    它保证了当多个Redisson客户端线程同时请求加锁时,优先分配给先发出请求的线程。所有请求线程会在一个队列中排队,当某个线程出现宕机时,Redisson会等待5秒后继续下一个线程,也就是说如果前面有5个线程都处于等待状态,那么后面的线程会等待至少25秒。

    RLock fairLock = redisson.getFairLock("anyLock");
    // 最常见的使用方法
    fairLock.lock();
  • 联锁​​​​​​​

可以将多个锁对象关联到一个锁对象时
​​​​​​

  • RLock lock1 = redissonInstance1.getLock("lock1");
    RLock lock2 = redissonInstance2.getLock("lock2");
    RLock lock3 = redissonInstance3.getLock("lock3");RedissonMultiLock lock = new RedissonMultiLock(lock1, lock2, lock3);
    // 同时加锁:lock1 lock2 lock3
    // 所有的锁都上锁成功才算成功。
    lock.lock();//业务逻辑
    lock.unlock();
  • 红锁

当有大部分(一半以上)锁加锁成功后,才算真正获得锁

RLock lock1 = redissonInstance1.getLock("lock1");
RLock lock2 = redissonInstance2.getLock("lock2");
RLock lock3 = redissonInstance3.getLock("lock3");RedissonRedLock lock = new RedissonRedLock(lock1, lock2, lock3);
// 同时加锁:lock1 lock2 lock3
// 红锁在大部分节点上加锁成功就算成功。 这里有3个锁,至少2个加锁成功,才算真的加锁成功
lock.lock();
...
lock.unlock();
  • 读写锁

上读锁的时候可以多个线程获取,上写锁只能有一个线程获取,经过测试当写锁还未释放的时候,读锁阻塞获取不了,直到写锁释放。

/*** 保证一定能读到最新数据,修改期间,写锁是一个排他锁(互斥锁)。读锁是一个共享锁* 写锁没释放,读就必须等待*/
@GetMapping("/read")
@ResponseBody
public String readValue() {RReadWriteLock readWriteLock = redisson.getReadWriteLock("rw-lock");RLock rLock = readWriteLock.readLock();try {rLock.lock();} catch (Exception e) {e.printStackTrace();} finally {rLock.unlock();}return "";
}@GetMapping("/write")
@ResponseBody
public String writeValue() {RReadWriteLock readWriteLock = redisson.getReadWriteLock("rw-lock");RLock rLock = readWriteLock.writeLock();try {//1、改数据加写锁,读数据加读锁rLock.lock();TimeUnit.SECONDS.sleep(10000);} catch (InterruptedException e) {e.printStackTrace();} finally {rLock.unlock();}return "";
}

redission分布式锁种类相关推荐

  1. spring定时任务(Scheduled)运行阻塞不执行/Redission分布式锁阻塞问题

    spring定时任务(Scheduled)运行阻塞不执行/Redission分布式锁阻塞问题 最近项目中发现一个bug,排查了很久,最后发现问题所在,在此记录一下. 问题描述: 项目运行一段时间后,c ...

  2. redis和redission分布式锁原理及区别

    redis和redission分布式锁原理及区别 我最近做租车项目,在处理分布式时用到分布式锁,我发现很多同事都在网上找分布式锁的资料,但是看的资料都不是很全,所以在这里我谈谈自己的分布式锁理解. 结 ...

  3. springboot 集成redission分布式锁

    Springboot整合Redisson 锁 一.依赖 <dependency><groupId>org.redisson</groupId><artifac ...

  4. Redission 分布式锁原理

    Reddission 分布式锁原理 总结: 使用无参的tryLock()方法时,redisson会自动添加一个定时任务,定时刷新锁的失效时间,如果unlock时失败,则会出现该锁一直不释放的情况, 因 ...

  5. redisTemplate分布式锁演变、redission分布式锁实现!

    以下文章来源方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/zhangkaixuan456 /article/details/110679617 分布式锁 ...

  6. 基于Redission实现分布式锁

    实现Redis的分布式锁,除了自己基于redis client原生api来实现之外,还可以使用开源框架:Redission Redisson是一个企业级的开源Redis Client,也提供了分布式锁 ...

  7. 教你如何使用redis分布式锁

    文章目录 一.redis客户端实现 应用 1.利用set nx命令实现分布式锁 2.利用分布式锁命令 setnx 问题 1.为什么不直接调用jedis.del(key)方法而采用redis+lua实现 ...

  8. redis专题:使用redis实现分布式锁

    文章目录 1. synchronized解决单应用下并发安全问题 2. 手写redis分布式锁解决分布式环境下并发安全问题 3. redisson分布式锁解决分布式环境下并发安全问题 3.0 Redi ...

  9. 面试只要问到分布式,必问分布式锁

    摘要:分布式知识是考验一个程序员知识面广度和深度很好的度量标准,而分布式锁又是其中非常重要的一个知识点. 本文分享自华为云社区<分布式锁实现--超级详细.高级程序员必知必会>,作者: 李子 ...

最新文章

  1. 被讨厌的勇气(讨厌我的人多了,你算老几)
  2. Unity3D研究院之与Android相互传递消息
  3. 行走智慧城市 数据要有统一“身份”
  4. 【移动端DL框架】当前主流的移动端深度学习框架一览
  5. 牛客网(剑指offer) 第三题 输入一个链表,从尾到头打印链表每个节点的值。
  6. Leetcode题库 2038.邻色同删(双指针法 C实现)
  7. react复制内容到剪贴板
  8. dyld: Library not loaded: @rpath/libswiftCore.dylib 解决方法
  9. Android插件化开发之用DexClassLoader加载未安装的APK资源文件来实现app切换背景皮肤
  10. unity之中级工程师
  11. 不同DPI下窗体的自适应的有关注意点(转)
  12. springmvc与struts2的区别
  13. iphone分辨率_揭示真实的手机屏幕大小和分辨率
  14. aspnet实现搜索查询_C#算法设计查找篇之01-顺序查找
  15. 使用HttpModule实现多个域名分别“绑定”到子目录
  16. repo一个新工程使用步骤
  17. 人工智能在5G网络中的应用
  18. MATLAB元胞自动机
  19. 实测PD18W/30W/65W充电器给iPhone xs充电快慢对比
  20. tplink无线网卡的linux,ubuntu上tp-link无线网卡驱动安装

热门文章

  1. LVS-DR模型试验
  2. 客户案例 | 宝藏平台,企业再也不用担心运营管理那些事儿
  3. 269家物联网企业排行榜发布!市值千亿的仅有10家企业
  4. Android Studio项目中Build.gradlle配置详解
  5. Sql Server 添加、修改列脚本
  6. python处理异常
  7. idea中采用git上传代码详细步骤
  8. 10-131 4-3 查询速度低于任何PC的便携式电脑
  9. RK3326 修改 selinux 属性为Permissive
  10. 教你炒股票3:你的喜好,你的死亡陷阱