redission分布式锁种类
基于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分布式锁种类相关推荐
- spring定时任务(Scheduled)运行阻塞不执行/Redission分布式锁阻塞问题
spring定时任务(Scheduled)运行阻塞不执行/Redission分布式锁阻塞问题 最近项目中发现一个bug,排查了很久,最后发现问题所在,在此记录一下. 问题描述: 项目运行一段时间后,c ...
- redis和redission分布式锁原理及区别
redis和redission分布式锁原理及区别 我最近做租车项目,在处理分布式时用到分布式锁,我发现很多同事都在网上找分布式锁的资料,但是看的资料都不是很全,所以在这里我谈谈自己的分布式锁理解. 结 ...
- springboot 集成redission分布式锁
Springboot整合Redisson 锁 一.依赖 <dependency><groupId>org.redisson</groupId><artifac ...
- Redission 分布式锁原理
Reddission 分布式锁原理 总结: 使用无参的tryLock()方法时,redisson会自动添加一个定时任务,定时刷新锁的失效时间,如果unlock时失败,则会出现该锁一直不释放的情况, 因 ...
- redisTemplate分布式锁演变、redission分布式锁实现!
以下文章来源方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/zhangkaixuan456 /article/details/110679617 分布式锁 ...
- 基于Redission实现分布式锁
实现Redis的分布式锁,除了自己基于redis client原生api来实现之外,还可以使用开源框架:Redission Redisson是一个企业级的开源Redis Client,也提供了分布式锁 ...
- 教你如何使用redis分布式锁
文章目录 一.redis客户端实现 应用 1.利用set nx命令实现分布式锁 2.利用分布式锁命令 setnx 问题 1.为什么不直接调用jedis.del(key)方法而采用redis+lua实现 ...
- redis专题:使用redis实现分布式锁
文章目录 1. synchronized解决单应用下并发安全问题 2. 手写redis分布式锁解决分布式环境下并发安全问题 3. redisson分布式锁解决分布式环境下并发安全问题 3.0 Redi ...
- 面试只要问到分布式,必问分布式锁
摘要:分布式知识是考验一个程序员知识面广度和深度很好的度量标准,而分布式锁又是其中非常重要的一个知识点. 本文分享自华为云社区<分布式锁实现--超级详细.高级程序员必知必会>,作者: 李子 ...
最新文章
- 被讨厌的勇气(讨厌我的人多了,你算老几)
- Unity3D研究院之与Android相互传递消息
- 行走智慧城市 数据要有统一“身份”
- 【移动端DL框架】当前主流的移动端深度学习框架一览
- 牛客网(剑指offer) 第三题 输入一个链表,从尾到头打印链表每个节点的值。
- Leetcode题库 2038.邻色同删(双指针法 C实现)
- react复制内容到剪贴板
- dyld: Library not loaded: @rpath/libswiftCore.dylib 解决方法
- Android插件化开发之用DexClassLoader加载未安装的APK资源文件来实现app切换背景皮肤
- unity之中级工程师
- 不同DPI下窗体的自适应的有关注意点(转)
- springmvc与struts2的区别
- iphone分辨率_揭示真实的手机屏幕大小和分辨率
- aspnet实现搜索查询_C#算法设计查找篇之01-顺序查找
- 使用HttpModule实现多个域名分别“绑定”到子目录
- repo一个新工程使用步骤
- 人工智能在5G网络中的应用
- MATLAB元胞自动机
- 实测PD18W/30W/65W充电器给iPhone xs充电快慢对比
- tplink无线网卡的linux,ubuntu上tp-link无线网卡驱动安装