什么是锁?
锁是一种常用的并发控制机制,用于保证一项资源在任何时候只能被一个线程使用,如果其他线程也要使用同样的资源,必须排队等待上一个线程使用完。
锁的示意图,如下所示:
什么是分布式锁?
上面说的锁指的是程序级别的锁,例如 Java 语言中的 synchronized 和 ReentrantLock 在单应用中使用不会有任何问题,但如果放到分布式环境下就不适用了,这个时候我们就要使用分布式锁。
分布式锁比较好理解就是用于分布式环境下并发控制的一种机制,用于控制某个资源在同一时刻只能被一个应用所使用。
分布式锁示意图,如下所示:
怎么实现分布式锁?
分布式锁比较常见的实现方式有三种:
- Memcached 实现的分布式锁:使用 add 命令,添加成功的情况下,表示创建分布式锁成功。
- ZooKeeper 实现的分布式锁:使用 ZooKeeper 顺序临时节点来实现分布式锁。
- Redis 实现的分布式锁。
本文要重点来说的是第三种,也就是 Redis 分布式锁的实现方式。
Redis 分布式锁的实现思路是使用 setnx(set if not exists),如果创建成功则表明此锁创建成功,否则代表这个锁