2

redis分布式锁的实现 - 空空大首领

 1 year ago
source link: https://www.cnblogs.com/zjh996/p/17148109.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

一.正常加锁

当两个用户同时注册一个用户名时,为保证用户名不能重复,因此对其注册的用户名加锁。

具体步骤:

获得用户注册的用户名,进行判断,如果为空则对其进行加锁,保存到数据库,释放锁资源。

二.线程出现阻塞

当A线程加锁后出现阻塞时,导致数据还没有存到数据库,锁的时间便会失效。

B线程便会执行,对数据进行加锁,成功后保存到数据库,而这时A线程启动,将数据保存到数据库,这时的数据便又会重复。

解决方法:

对锁进行延期,加锁成功后新建一个守护线程,监控锁的过期时间,如果这个时间小于设置的时间,则会自动延期

问题:1.为何使用守护线程

不一定要用守护线程,只要能保证对锁进行延期即可

2.为何要设置过期时间

为了避免出现特殊情况,导致锁一直留在redis中,不能释放,比如:断电,删除锁失败

三.网上对线程的说法

 极端情况下以上的思路还是可能出现问题,比如:

  1. 有两个线程A,B一前一后执行
  2. A线程正常执行,但是执行业务时间较长,并且守护线程阻塞或者延期失败,导致锁自动过期
  3. B线程又来加锁,之后A线程继续执行,最后释放锁,其实A线程加的锁已经过期,释放的是B线程的锁

解决方法:

  • 在执行setIfAbsent方法时,给key设置一个唯一值,如加uuid
  • 在释放锁时,先判断value对不对,再释放

但是这个说法不是我们加锁的初衷,而且没意义,我们加锁就是为了:避免多个线程同时执行这段代码,但网上这个说法明显是支持多线程同时执行


Recommend

  • 102
    • 微信 mp.weixin.qq.com 6 years ago
    • Cache

    浅谈Redis分布式锁实现

    浅谈Redis分布式锁实现 左手...

  • 115
    • blueskykong.com 6 years ago
    • Cache

    基于redis的分布式锁实现

    This blueskykong.com page can’t be found No webpage was found for the web address: http://blueskykong.com/2018/01/06/redislock/?utm_source=tuicool&utm_medium=referral...

  • 64

    分布式锁很久之前有讲过并发编程中的锁并发编程的锁机制:synchronized和lock。在单进程的系统中,当存在多个线程可以同时改变某个变量时,就需要对变量或代码块做同步,使其在修改这种变量时能够线性执行消除并发修改变量。而同步的本质是通过锁来实现的。为了实...

  • 74
    • www.xiongxiangming.com 6 years ago
    • Cache

    分布式锁之redis实现

    摘要:分布式架构设计如今在企业中被大量的应用,而在不同的分布式节点进行协同工作的时候,节点服务的时序、结果的正确性以及执行成本也成为了必须考虑的重要因素。其中竞态条件会导致执行结果的不正确,不同服务节点同时处理同一任务也将耗费不必需的系统资源,...

  • 48

    海恩法则所说的那样,每一起严重的事故背后,必然有29次轻微事故、300起未遂先兆,1000起事故隐患。

  • 41
    • www.tuicool.com 4 years ago
    • Cache

    Redis实现分布式文件夹锁

    缘起 最近做一个项目,类似某度云盘,另外附加定制功能,本人负责云盘相关功能实现,这个项目跟云盘不同的是,以项目为分配权限的单...

  • 15

    redis分布式锁 为什么需要分...

  • 3

    熨平所有褶皱,假装脑袋空空 | 文案拼图0055 原标题:第0055块拼...

  • 3

    钟薛高,高不可攀的「高」。 在所有的雪糕品牌中,有卖得比钟薛高贵的,有国民度比钟薛高好的,还有性价比吊打钟薛高的。但在话题讨论度上,这些品牌加起来可能也不如充满争议的钟薛高,它是「雪糕刺客」的刺客头子,是新消费的雪糕品牌,也是高不可攀的雪糕...

  • 10

    V2EX  ›  问与答 工作多年刷算法题,脑子空空,很有挫败感  

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK