-
可靠的分布式锁要具备以下几个特性
- 互斥性。在任意时刻,只有一个客户端能持有锁
- 不会发生死锁。即使有一个客户端在持有锁的期间崩溃,而没有主动解锁,也能保证后续其他客户端能加锁。
- 具有容错性。只要大部分的Redis节点正常运行。客户端就能加锁和解锁。
- 解铃还须系铃人。加锁和解锁必须是同一个客户端,客户端自己不能把别人的锁给解了。
- 锁不能自己失效。正常执行程序过程中,锁不能因为某些原因失效。
redis加锁流程
setnx 保证redis中这个key唯一存在 (互斥性)
expires 过期时间。会自动将存储的值从redis删除 (不会发生死锁)
requestId 客户端标识
redis解锁流程
看源码的话,Redis保持原子性都是通过Lua代码来实现
虽然知道流程,Redis分布锁还是没有搞明白,等清楚后再更新这篇文章