您现在的位置是:主页 > news > 网站设计布局/百度首页排名优化平台

网站设计布局/百度首页排名优化平台

admin2025/6/2 17:15:16news

简介网站设计布局,百度首页排名优化平台,找个专门做各种外卖的网站,营销型网站的推广实现一把可靠的分布式锁 在这种分布式应用、中间件盛行的时代,我相信对于开发同学来讲,分布式锁不会是一个陌生的概念。 那么怎么样能用Redis实现一把合格的分布式锁呢? 一般使用Redis实现分布式锁,都是利用Redis是第三方中间件…

网站设计布局,百度首页排名优化平台,找个专门做各种外卖的网站,营销型网站的推广实现一把可靠的分布式锁 在这种分布式应用、中间件盛行的时代,我相信对于开发同学来讲,分布式锁不会是一个陌生的概念。 那么怎么样能用Redis实现一把合格的分布式锁呢? 一般使用Redis实现分布式锁,都是利用Redis是第三方中间件…

实现一把可靠的分布式锁

在这种分布式应用、中间件盛行的时代,我相信对于开发同学来讲,分布式锁不会是一个陌生的概念。

那么怎么样能用Redis实现一把合格的分布式锁呢?

在这里插入图片描述

一般使用Redis实现分布式锁,都是利用Redis是第三方中间件的特性,用来实现一把适用于分布式场景的锁。

通过这个方法,如果Redis数据库中没有这个键的话就设置成功,就是获取到了锁;如果有这个键的话就是设置失败,就没有获取到锁。

SETNX key value

然后,在完成业务代码之后删除这段代码,删除这个key,释放锁。

为了保证我们就算代码出错也要释放掉这个锁,要把删除锁的操作放到finally代码块里面。

这样就是一把可靠的分布式锁了吗?

如果我获取锁成功,还没有执行finally代码块,这时候应用挂了,是不是锁就永远不能被释放了呢?

所以我们设置锁的时候要加一个过期时间,用来保证这个锁一定会被释放掉。

如果设置过期时间和加锁是两个命令,那么在两个命令之间挂了也是有可能的,所以我们要用一条命令来完成这两个操作,或者使用lua脚本来保证操作的原子性。

那么一条线程在执行的时候超时了,锁到时间被删除了,这时候又一个线程获取到了锁,第一个线程执行完了去释放的时候释放的就是第二个线程的锁,就会造成错乱。所以我们加锁设置值的时候需要设置一下随机值,保证我设置的锁,只有我们删除。

那么这个超时时间到底要设置成多少呢?多少感觉都不合适,总有可能线程执行的太慢导致锁被删除的情况发生。所以我们可以实现一个看门狗(一般是过期时间的三分之一),使用一个异步线程去看锁是不是还在,还在的话就延长时间。保证锁不会被删除。

最后就是在请求分布式锁的时候没有获取到,要循环获取,不能直接返回。