老男孩教育专注IT教育10余年,只培养IT技术精英

全国免费咨询电话(渠道合作):400-609-2893

分布式锁是什么?为什么要使用分布式锁?Python零基础入门

老男孩IT教育

常见问题

2021年9月2日 17:58

在前期学习Python的时候,我们会学一些基础知识,也就是所谓的把地基打牢固,有基础之后我们学习更多的技术就不会那么困难了,理解起来也相对容易一些,而今天提到的分布式锁,就是我们在后期会接触到的,小编先给大家预热一下,请看下文:

       在前期学习Python的时候,我们会学一些基础知识,也就是所谓的把地基打牢固,有基础之后我们学习更多的技术就不会那么困难了,理解起来也相对容易一些,而今天提到的分布式锁,就是我们在后期会接触到的,小编先给大家预热一下,请看下文:

Python培训班

       什么是分布式锁?为什么要使用分布式锁?

       假设某旗舰店只剩一款手机,此时有两个人同时买,该怎么卖?如果只有一台服务器完全可行,而这在分布式的场景下是行不通的,因为买手机这段程序是部署运行在很多台服务器上的,而lock锁等只是在进程上的锁,并不能锁其他服务器上的程序,所以一款手机还是可能卖两次了。

       怎么实现分布式锁?

       常见的实现分布式锁的方法有mysql分布式锁和redis分布式锁。

       mysql分布式锁适合中小系统,一般是利用主键唯一的特性,首先在主程序生成一个业务ID,然后当有两个服务器同时调用买手机的程序时,由于他们插入数据库时使用的是同一个业务ID,而这个ID是主键,不能插入两次,所以会有一个程序返回1,一个程序返回0,返回1的那边插入成功,相当于得到了这个分布式锁。

       redis分布式锁适合中大型项目,将业务ID作为key,setnx插入的时候如果key不存在就插入成功并返回1,如果key已经存在就返回0,插入成功返回1的那位就可以拿到锁去买手机了。

        需要注意的问题有:

       1、如果它刚加了锁,还没释放就崩了,该咋办?

       解决方法:设置key的过期时间,并且插入与设置过期时间需要当成原子操作来进行,即命令:setnx key value expire 10不要拆分为两条命令来执行,因为有可能刚执行第一条加了锁还没执行第二条就挂了。

       2、如果锁的时间到了,手机还没买完,怎么办?

       解决方法:使用redis的看门狗(watchdog)功能,当锁要过期时自动延长一倍的时间。

  其实Python分布式锁的相关知识还有很多是我们没有介绍到的,如果你想要了解或学习更多有关 Python的知识,欢迎咨询老男孩教育在线客服。

  推荐阅读:

  学习Python课程怎么样?哪些人更适合学习?

  【Python全栈开发课程】什么是函数返回值?

  Python常见字符编码有哪些?Python超级网络直播课

本文经授权发布,不代表老男孩教育立场。如若转载请联系原作者。