一、什么是分布式锁
分布式锁是一种用于解决数据一致性和并发控制的机制。与单机锁不同,分布式锁适用于多个进程或服务之间的协作。
二、分布式锁作用
防止数据重复写入:在多个服务并发执行相同操作时,分布式锁可以保证只有一个服务能够执行写入操作,避免数据的重复写入。
限流控制:在高并发场景下,通过分布式锁控制对某个资源的访问次数,可以有效防止系统过载。
定时任务:在分布式环境下,定时任务可能会被多个实例触发,使用分布式锁可以确保只有一个实例会执行定时任务。
三、分布式锁特性
互斥性:在同一时间,只有一个线程或进程能够持有锁,确保临界区内的操作不会被其他线程干扰。
可重入性:某些实现支持同一线程多次获取锁而不发生死锁,这对于递归调用或复杂逻辑的处理非常有用。
超时机制:分布式锁通常会设置超时时间,避免因持有锁的进程崩溃导致锁永远无法释放。
容错性:在网络分区或进程故障时,分布式锁应能够有效处理故障,确保系统的可靠性和稳定性。
公平性:某些分布式锁的实现提供了公平性机制,确保等待时间最长的线程优先获取锁,避免“饥饿”现象。
四、分布式锁实现方式
基于缓存(Redis)实现分布式锁(AP):Redis 提供了 SETNX 命令,可以用于原子性地创建锁。该方法性能较好,但需要处理锁的超时机制。
基于Zookeeper实现分布式锁(CP):可以通过创建临时节点实现锁的功能。Zookeeper 的强一致性和高可用性使得它成为一种优雅的分布式锁解决方案。
基于数据库实现分布式锁:通过在数据库中创建一条特定记录(如锁表),使用数据库的事务特性来实现锁的加锁和解锁。