6|2Redisson
Redisson是架设在Redis基础上的一个Java驻内存数据网格(In-Memory Data Grid)。
充分的利用了Redis键值数据库提供的一系列优势,基于Java实用工具包中常用接口,为使用者提供了一系列具有分布式特性的常用工具类。
使得原本作为协调单机多线程并发程序的工具包获得了协调分布式多机多线程并发系统的能力,大大降低了设计和研发大规模分布式系统的难度。
同时结合各富特色的分布式服务,更进一步简化了分布式环境中程序相互之间的协作。
首先感受一下通过Redisson Api使用redis分布式锁。
定义RedissonBuilder,通过redis集群地址构建RedissonClient。
定义RedissonClient类型的Bean。
业务代码里,通过RedissonClient获取分布式锁。
由于对Redisson分布式锁实现原理了解的也不是很透彻,这里推荐一篇文章:Redisson 分布式锁实现分析。
6|3Redisson和RedisLockRegistry对比
-
RedisLockRegistry通过本地锁(ReentrantLock)和redis锁,双重锁实现,Redission通过Netty Future机制、Semaphore (jdk信号量)、redis锁实现。
-
RedisLockRegistry和Redssion都是实现的可重入锁。
-
RedisLockRegistry对锁的刷新没有处理,Redisson通过Netty的TimerTask、Timeout 工具完成锁的定期刷新任务。
-
RedisLockRegistry仅仅是实现了分布式锁,而Redisson处理分布式锁,还提供了了队列、集合、列表等丰富的API。
7|0动手实现分布式锁
===================
7|1实现原理
本地锁(ReentrantLock)+ redis锁
7|2获取锁lua脚本
7|3锁刷新lua脚本
7|4锁释放lua脚本
7|5本地锁定义
每一个lock key对应唯一的一个本地锁
7|6 线程标识定义
分布式环境下,每一个线程对应一个唯一标识
7|7 锁刷新定时任务定义
通过JDK ConcurrentTaskScheduler完成定时任务执行,ScheduledFuture完成定时任务销毁。其中taskId对应线程标识。
7|8定义分布式锁注解
7|9分布式锁切面
通过RedisLock注解实例lockInfo获取到锁key值、锁过期时间信息。
7|10获取锁过程
-
通过lockInfo.key()方法获取到锁key值,通过锁key值拿到对应的本地锁(ReentrantLock)
-
本地锁获取锁对象
-
进入获取redis锁的循环
-
通过缓存服务组件执行获取锁的lua脚本
-
如果获取到redis锁,判断当前线程是否第一次获取到锁并且开启了锁刷新,相应的注册锁刷新定时任务
-
如果没有获取到redis锁,休眠lockInfo.sleep()毫秒的时间,再次重试
7|11释放锁过程
-
获取到当前锁key值对应的本地锁
-
判断当前线程是否为本地锁锁的持有者
-
如果本地锁的重入次数大于1,则只释放本地锁
-
如果本地锁的重入次数等于1,释放本地锁和redis锁
7|12分布式锁测试
定义测试类,测试方法注上@RedisLock注解,制定锁的key值为 “redis-lock-test”,测试方法内随机休眠。
开启20个线程,同时调用测试方法。
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
最后
即使是面试跳槽,那也是一个学习的过程。只有全面的复习,才能让我们更好的充实自己,武装自己,为自己的面试之路不再坎坷!今天就给大家分享一个Github上全面的Java面试题大全,就是这份面试大全助我拿下大厂Offer,月薪提至30K!
我也是第一时间分享出来给大家,希望可以帮助大家都能去往自己心仪的大厂!为金三银四做准备!
一共有20个知识点专题,分别是:
Dubbo面试专题
JVM面试专题
Java并发面试专题
Kafka面试专题
MongDB面试专题
MyBatis面试专题
MySQL面试专题
Netty面试专题
RabbitMQ面试专题
Redis面试专题
Spring Cloud面试专题
SpringBoot面试专题
zookeeper面试专题
常见面试算法题汇总专题
计算机网络基础专题
设计模式专题
1710748978215)]
SpringBoot面试专题
[外链图片转存中…(img-vsfaJOrO-1710748978215)]
zookeeper面试专题
[外链图片转存中…(img-wv9xjWxy-1710748978215)]
常见面试算法题汇总专题
[外链图片转存中…(img-tt4Y5thq-1710748978216)]
计算机网络基础专题
[外链图片转存中…(img-LkUQ7DxI-1710748978216)]
设计模式专题
[外链图片转存中…(img-UjGGHhMP-1710748978216)]