网站访客抓取,口碑好网站制作公司哪家好,美业拓客公司哪家好,江阴网站建设公司可重入锁总结
从实现原理以及源码的层面#xff0c;真正剖析和了解到了redis分布式锁的企业级的实现#xff0c;这个分布式锁实现的还是非常漂亮的#xff0c;麻雀虽小#xff0c;五脏俱全#xff0c;分布式的可重入锁#xff0c;总结一下流程
#xff08;1#xff0…可重入锁总结
从实现原理以及源码的层面真正剖析和了解到了redis分布式锁的企业级的实现这个分布式锁实现的还是非常漂亮的麻雀虽小五脏俱全分布式的可重入锁总结一下流程
1加锁在redis里设置hash数据结构生存周期是30000毫秒 2维持加锁代码里一直加锁redis里的key会一直保持存活后台每隔10秒的定时任务watchdog不断的检查只要客户端还在加锁就刷新key的生存周期为30000毫秒 3可重入锁同一个线程可以多次加锁就是在hash数据结构中将加锁次数累加1 4锁互斥不同客户端或者不同线程尝试加锁陷入死循环等待 5手动释放锁可重入锁自动递减加锁次数全部释放锁之后删除锁key 6宕机自动释放锁如果持有锁的客户端宕机了那么此时后台的watchdog定时调度任务也没了不会刷新锁key的生存周期此时redis里的锁key会自动释放 7尝试加锁超时在指定时间内没有成功加锁就自动退出死循环标识本次尝试加锁失败 8超时锁自动释放获取锁之后在一定时间内没有手动释放锁则redis里的key自动过期自动释放锁
这8大机制组合在一起才是构成了一个企业级的基于redis的分布式锁的方案
redisson基于redis实现的分布式锁的核心原理给搞通透了后续我们再看其他的锁包括公平锁、读写锁、MultiLock、RedLock这一系列的源码的时候就比较得心应手了。
redis加锁本质还是在redis集群中挑选一个master实例来加锁master - slave实现了高可用的机制如果master宕机slave会自动切换为master
假设客户端刚刚在master写入一个锁此时发生了master的宕机但是master还没来得及将那个锁key异步同步到slaveslave就切换成了新的master。此时别的客户端在新的master上也尝试获取同一个锁会成功获取锁
此时两个客户端都会获取同一把分布式锁可能有的时候就会导致一些数据的问题
redisson的分布式锁隐患主要就是在这里
预告
下一章开始剖析公平锁是如何实现排队以及加锁逻辑的