听故事学技术之【分布式锁】

我正在参与掘金创作者训练营第5期,点击了解活动详情

这个故事,比较悲伤: 刚子,强子,富贵,小龙是很要好的小伙伴,从小在一个村子长大。

刚子从小就梦想去大城市闯闯,听说那里挣钱多,吃得好,努力努力还能把家里人也接过去,过好的生活。但刚子没上过多少学,只能干体力活,但是好在为人处事很是不错。到了该结婚的年纪,找了隔壁村一个姑娘,扯了证,但是有了孩子之后,生活愈发艰难,就决定去大城市闯闯。
初到大城市的他很快找到了工作,干活愈加卖力,就为了多挣点回家给老婆孩子。一个被阳光晒透了的下午,刚子在工地上出了意外,但是老家没电话,没法通知家里,老婆孩子到老都不知道他去了哪里。

image.png 强子也想去大城市挣钱,但是放心不下老婆和孩子,看着愈发艰难的生活,最后决定还是出发。走的时候,抱着媳妇说了好多话,最大声的就是,我要是三年没回来,你就改嫁吧,别等我了。

三年过去了,强子的工地老板说,今年谁留守工地多发两个月工资,强子咬咬牙说自己来。第四年的时候回家,媳妇已经改嫁了,他想起了当初说的话,后悔不已。

image.png 村间地头上,强子得知富贵也想出去闯荡,就把自己买来的两个手机给了富贵。富贵走的时候交代自己的媳妇,他计划是一年后回家,但是若是有什么好机会,就呆的久一点,但是可以通过打电话判断他还能否回得来。

image.png 小龙是最后一个出村子的,老来得子的他很是珍惜,从强子家人那得知可以通过手机联系。走的时候专门去县城给媳妇买了个手机用来联系。可是不出意外的话小龙也出了意外,其他人通过电话告诉了他媳妇,他媳妇受不了昏厥了过去,孩子也不知道发生了什么,不知道如何是好。

image.png

其实这里 刚子,强子,富贵,小龙 的四种人生刚好就是redis分布式锁的四个状态:

刚子

一个线程加了锁,但是这个线程崩溃了,锁永远得不到释放,其他线程也拿不到锁,造成了死锁

强子

一个线程加了锁,并给这个锁设置了过期时间3秒,但是线程执行任务用了4秒,回来锁已经被自动释放了。

富贵

一个线程加了锁,并设置了过期时间,为了防止任务未完成,锁被自动释放。另起了一个线程,来检测主线程是否仍然在执行,若是过期时间到了,主线程仍然在执行,就延长锁的过期时间,如此反复。

小龙

这个情况是在redis集群状态下发生的,当主节点接收到锁之后,还未向其他节点同步锁,就宕机了,导致当从节点当选为主节点并提供服务的时候,这个锁是不存在的。从而引发系统问题。

猜你喜欢

转载自juejin.im/post/7126933926395772942