分布式锁
一、分布式锁概述
1.为了防止分布式系统中的多个进程之间相互干扰,我们需要一种分布式协调技术来对这些进程进行调度。而这个分布式协调技术的核心就是来实现这个分布式锁。
2.分布式锁的实现方式
基于数据库实现
基于Redis实现
基于ZooKeeper实现
二、Redis实现分布式锁
1.分布式锁场景。秒杀、抢优惠券
2.redis单线程模型
三、Redis分布式锁问题
1. 锁的超时问题
问题讲解:
虽然上面给锁加上了超时时间,但是客户端并不能一定在超时时间之内完成定时任务,所以,即使当前客户端没有完成任务,此时又会有其他的客户端设置锁成功,此时同一资源将会面临多个客户端同时操作的问题。
解决方案:
客户端可以在锁设置成功之后,进行定时任务,在锁超时之前使用lua脚本删除锁并重新设置锁和超时时间。
当然,这里为什么会使用lua来完成操作呢,其实和上面的原子性问题一样,在删除锁和重新设置锁和锁的超时时间之间,可能面临其他的客户端将锁资源占有,而lua具有原子性的特性,删除锁和重新加锁这两个操作要么都完成,要么都不完成。