分布式锁 就是一个在分布式下的互斥机制,保证同一时刻只有一个机器的一个线程能获取到锁。
分布式锁
- 保证同一时刻只有一个机器的一个线程能获取到锁
- 锁失效机制,防止死锁
- 非阻塞获取锁,获取不到直接返回
- 高性能获取锁、释放锁
- 解铃还须系铃人
redis实现分布式锁
一个关键是保证加锁、解锁的原子性。
加锁
执行setnx 和expire的合成原子指令,value为随机生成的UUID。若key不存在,设置key并设置过期时间。若key存在,返回0.
设置过期时间,防止死锁。
解锁
使用redis执行lua脚本,redis会把lua脚本的代码当做一条指令,保证原子性。脚本中对比value是否跟传入的UUID相同,若相同说明是占用锁的线程,才能执行del删除key。