分布式锁简述

63 阅读1分钟

一、分布式锁的设计理念

单机场景中的锁不适于多机场景下使用,多机场景下自然需要一种分布式形态的锁,允许多机共同抢占。这种锁同样需要实现并满足锁的一般特点:

1.必须要保证互斥机制的稳定性。

2.加锁与解锁的操作尽量高性能。

3.可以根据具体情境考虑实现抢锁失败是否阻塞。

4.最好具备可重入与失效机制,避免死锁。

二、实现方式:

(一)基于MySQL数据库实现,

1、可以借助MySQL的唯一索引,进行 insert 等操作,以操作的成功与否决定是否抢锁成功。 2、也可以借助MySQL的排它锁 for update ,对增改操作加锁,实现互斥。 3、另外也可以通过记录版本号信息,实现乐观锁。但是对于MySQL分布式锁的实现,其加解锁需要在磁盘上进行读写,性能上可能不太如意,需要根据实际场景考虑是否采用该方式。

(二)基于Redis实现,该方式也是本文将要实现的方式。

通常可以借助Redis中的 SETNX 操作,实现加锁的互斥性。 而Redis作为一种单工作线程的内存数据库,其所有命令操作具有天然原子性,这保证了并发的安全性。 另外,其采用的IO多路复用机制保证了其高吞吐特性。 因此,在高并发场景下,通常可以采用基于Redis实现的分布式锁。