京东秒杀系统模块的Redis分布式锁深度剖析,没给你讲明白你打我!

6|2Redisson


Redisson是架设在Redis基础上的一个Java驻内存数据网格(In-Memory Data Grid)。

充分的利用了Redis键值数据库提供的一系列优势,基于Java实用工具包中常用接口,为使用者提供了一系列具有分布式特性的常用工具类。

使得原本作为协调单机多线程并发程序的工具包获得了协调分布式多机多线程并发系统的能力,大大降低了设计和研发大规模分布式系统的难度。

同时结合各富特色的分布式服务,更进一步简化了分布式环境中程序相互之间的协作。

首先感受一下通过Redisson Api使用redis分布式锁。

定义RedissonBuilder,通过redis集群地址构建RedissonClient。

京东秒杀系统模块的Redis分布式锁深度剖析,没给你讲明白你打我

定义RedissonClient类型的Bean。

京东秒杀系统模块的Redis分布式锁深度剖析,没给你讲明白你打我

业务代码里,通过RedissonClient获取分布式锁。

京东秒杀系统模块的Redis分布式锁深度剖析,没给你讲明白你打我

由于对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脚本


京东秒杀系统模块的Redis分布式锁深度剖析,没给你讲明白你打我

7|3锁刷新lua脚本


京东秒杀系统模块的Redis分布式锁深度剖析,没给你讲明白你打我

7|4锁释放lua脚本


京东秒杀系统模块的Redis分布式锁深度剖析,没给你讲明白你打我

7|5本地锁定义


每一个lock key对应唯一的一个本地锁

京东秒杀系统模块的Redis分布式锁深度剖析,没给你讲明白你打我

7|6 线程标识定义


分布式环境下,每一个线程对应一个唯一标识

京东秒杀系统模块的Redis分布式锁深度剖析,没给你讲明白你打我

7|7 锁刷新定时任务定义


通过JDK ConcurrentTaskScheduler完成定时任务执行,ScheduledFuture完成定时任务销毁。其中taskId对应线程标识。

京东秒杀系统模块的Redis分布式锁深度剖析,没给你讲明白你打我

7|8定义分布式锁注解


京东秒杀系统模块的Redis分布式锁深度剖析,没给你讲明白你打我

7|9分布式锁切面


京东秒杀系统模块的Redis分布式锁深度剖析,没给你讲明白你打我

通过RedisLock注解实例lockInfo获取到锁key值、锁过期时间信息。

7|10获取锁过程


京东秒杀系统模块的Redis分布式锁深度剖析,没给你讲明白你打我

  1. 通过lockInfo.key()方法获取到锁key值,通过锁key值拿到对应的本地锁(ReentrantLock)

  2. 本地锁获取锁对象

  3. 进入获取redis锁的循环

  4. 通过缓存服务组件执行获取锁的lua脚本

  5. 如果获取到redis锁,判断当前线程是否第一次获取到锁并且开启了锁刷新,相应的注册锁刷新定时任务

  6. 如果没有获取到redis锁,休眠lockInfo.sleep()毫秒的时间,再次重试

7|11释放锁过程


京东秒杀系统模块的Redis分布式锁深度剖析,没给你讲明白你打我

  1. 获取到当前锁key值对应的本地锁

  2. 判断当前线程是否为本地锁锁的持有者

  3. 如果本地锁的重入次数大于1,则只释放本地锁

  4. 如果本地锁的重入次数等于1,释放本地锁和redis锁

7|12分布式锁测试


定义测试类,测试方法注上@RedisLock注解,制定锁的key值为 “redis-lock-test”,测试方法内随机休眠。

京东秒杀系统模块的Redis分布式锁深度剖析,没给你讲明白你打我

开启20个线程,同时调用测试方法。

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

最后

即使是面试跳槽,那也是一个学习的过程。只有全面的复习,才能让我们更好的充实自己,武装自己,为自己的面试之路不再坎坷!今天就给大家分享一个Github上全面的Java面试题大全,就是这份面试大全助我拿下大厂Offer,月薪提至30K!

我也是第一时间分享出来给大家,希望可以帮助大家都能去往自己心仪的大厂!为金三银四做准备!
一共有20个知识点专题,分别是:

Dubbo面试专题

JVM面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Java并发面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Kafka面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

MongDB面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

MyBatis面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

MySQL面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Netty面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

RabbitMQ面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Redis面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Spring Cloud面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

SpringBoot面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

zookeeper面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

常见面试算法题汇总专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

计算机网络基础专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

设计模式专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

1710748978215)]

SpringBoot面试专题

[外链图片转存中…(img-vsfaJOrO-1710748978215)]

zookeeper面试专题

[外链图片转存中…(img-wv9xjWxy-1710748978215)]

常见面试算法题汇总专题

[外链图片转存中…(img-tt4Y5thq-1710748978216)]

计算机网络基础专题

[外链图片转存中…(img-LkUQ7DxI-1710748978216)]

设计模式专题

[外链图片转存中…(img-UjGGHhMP-1710748978216)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 18
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值