当前位置: 首页 > 科技观察

一分钟实现分布式锁

时间:2023-03-13 18:10:55 科技观察

1.起源在分布式环境中,多台机器上的多个进程对一个数据进行操作。在“超卖”的情况下,分布式环境下如何实现简单的分布式锁和关键资源的互斥是今天要讨论的话题。2、互斥原则:多个访问方对同一个资源进行操作需要进行互斥。通常使用一把这些访问方可以同时访问的锁来实现互斥。例1:同进程多线程互斥。典型的场景是生产者和消费者操作同一个队列时的互斥方案:设置一个所有线程都可以访问的锁来实现互斥。步骤:(1)多个线程同时抢锁(2)只有一个线程抢到,没抢到就阻塞,不然下次再来(3)抢到锁的线程操作criticalresources(4)操作criticalresource后释放锁例2:同一个操作系统上多个进程的互斥。一个典型的场景是一个手机上的多个应用写入同一个文件。比如文件inode,OS帮了我们)步骤:(1)多个进程同时抢锁(2)只有一个进程抢,没抢的阻塞,或者下次抢(3)抢锁关键资源的进程操作(4)操作关键资源后释放锁3.分布式环境下的多进程互斥在分布式环境下,多台机器上的多个进程对一个数据进行操作是互斥的。比如同一个uid=123,要求Avoidsimultaneousdebits。根据上面的原则,先找一把能被多机多进程同时访问的锁,比如redis。步骤:(1)多台机器上的多个进程竞争这把锁,比如同时在缓存上设置key=123(2)只有一个进程会抢到这把锁,即只有一个进程会把key设置为cache=123可以成功,不成功的进程下次抢(3)抢到锁的进程扣余额(4)扣完后释放锁,即删除缓存key=123相互分布式环境中的排除,完成。【本文为专栏作者《58神剑》原创稿件,转载请联系原作者】