美文网首页
关于分布式锁

关于分布式锁

作者: 低调_0c1d | 来源:发表于2018-08-16 09:29 被阅读7次

背景

在系统开发过程中,难免会遇到为了保证状态的一致性,而使用锁的情况。当我们是在单应用的情况下,可以通过synchronized关键字或者ReentrantLock类的方式来加锁,但是在分布式系统中,就不能只考虑单进程内的锁,而是要考虑分布式锁的实现。

实现分布式锁的三种方式

目前主流的分布式锁主要有三种方式:
1.memcached分布式锁利用的是add命令是原子性操作
2.redis分布式锁利用的是setnx命令是原子性操作
3.zookeeper是利用顺序临时节点来实现分布式锁和等待队列

分布式锁主要考虑三个核心要素

  • 加锁
  • 解锁
  • 锁超时

Redis分布式锁

加锁

线程执行过程中,如果set命令返回成功,则该线程表示抢锁成功,线程继续执行;如果set命令返回失败,则表示该线程抢锁失败,线程可以选择继续抢锁,或者放弃执行。经典的秒杀场景就是抢锁成功,秒杀行为成功,抢锁失败,秒杀行为失败。

解锁

有加锁就一定要有解锁,可以通过del命令实现

锁超时

如果抢到锁的进程在未解锁的时候突然down掉了,会导致其他进程中的线程永远都抢不到锁,所以通过set命令加锁的时候,必须设置锁的超时时间,一旦超时时间到达,锁自动被释放。此时又引出一个问题,如果锁超时的时候,线程还处于活动状态,需要继续持有锁,此时就需要在抢到锁的时候,再启动一个线程,保证在锁被超时前可以增加锁定的时间,一旦进程down掉,原有线程和延续锁的线程会全部停止,之后就是等待锁的超时时间到了之后,其他的进程就可以抢锁了。

相关文章

网友评论

      本文标题:关于分布式锁

      本文链接:https://www.haomeiwen.com/subject/lmcnbftx.html