什么是锁

今天要谈的是如何在分布式环境下实现一个全局锁,在开始之前先说说非分布式下的锁:

  • 单机 – 单进程程序使用互斥锁mutex,解决多个线程之间的同步问题
  • 单机 – 多进程程序使用信号量sem,解决多个进程之间的同步问题

这里同步的意思很简单:某个运行者,用某个工具,保障某段代码,独占的运行,直到释放。

分布式锁解决的是 多台机器 – 多个进程 之间的同步问题,因为不同的机器之间mutex/sem无法使用。不过要注意:即便如此,一个进程内多个线程之间仍旧建议使用mutex同步,尽量减少对分布式锁服务造成不必要的负担。

redis分布式锁

首先呢,基于redis的分布式锁并不是一个坊间方案,而是redis官网提供的解决思路并且有若干语言的实现版本直接使用。

今天要做的,首先是阅读官方的文档(中文点我英文点我),有些地方讲的不怎么清晰,所以我接下来会分析PHP版本的代码,应该可以解答你的主要疑惑。

分析代码

首先打开代码:https://github.com/ronnylt/redlock-php/blob/master/src/RedLock.php,这是PHP的官方推荐实现版本,它基于composer安装(不懂composer可以点我)。

构造函数