分布式系统中的锁


Author: yifei / Created: Nov. 15, 2017, 12:42 p.m. / Modified: Nov. 15, 2017, 8:51 p.m. / Edit

分布式系统需要使用分布锁。首先我们来回忆一下在单机情况下的锁。

当我们的程序在需要访问临界区的时候,我们可以加一个锁,如果是多线程程序,可以使用线程锁,如果是多进程程序,可以使用进程级别的锁。但是在分布式的环境中,如果在不同主机上部署的程序要访问同一个临界区是该怎么做呢?这时候我们需要分布式的锁。

当部署的服务或者脚本不在同一台机器上时,使用分布式的锁,可以使用zookeeper或者redis实现一个分布式锁。这里主要介绍一下基于redis的分布式锁。

redis分布式锁:

加锁

SET resource-name anystring NX EX max-lock-time

解锁

if redis.call("get",KEYS[1]) == ARGV[1]
then
    return redis.call("del",KEYS[1])
else
    return 0
end

[1] https://redis.io/commands/set


评论区