锁是多线程编程中的一个重要概念,它是保证多线程并发时顺利执行的关键。我们通常所说的“锁”是指程序中的锁,也就是单机锁,例如 Java 中的 Lock 和 ReadWriteLock 等,而所谓的分布式锁是指可以使用在多机集群环境中的锁。
我们本文的面试题是,使用 Redis 如何实现分布式锁?
典型回答
首先来说 Redis 作为一个独立的三方系统(通常被作为缓存中间件使用),其天生的优势就是可以作为一个分布式系统来使用,因此使用 Redis 实现的锁都是分布式锁,理解了这个概念才能看懂本文所说的内容。
分布式锁的示意图,如下所示: image.png使用 Redis 实现分布式锁可以通过以下两种手段来实现:
- 使用 incr 方式实现;
- 使用 setnx 方式实现。
有人可能会奇怪 incr 不是用来实现数值 +1 操作的吗?用它怎么来实现分布式锁呢?
我们下来看 incr 的使用示例:
网友评论