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

看源码的话,Redis保持原子性都是通过Lua代码来实现
虽然知道流程,Redis分布锁还是没有搞明白,等清楚后再更新这篇文章
本文深入探讨了Redis分布式锁的实现特性,包括互斥性、防止死锁、容错性、解铃还须系铃人原则以及锁的持久性。详细介绍了加锁和解锁的流程,强调了setnx命令和过期时间在确保锁安全中的作用。同时,提到了Lua脚本在保持操作原子性方面的重要性。虽然已知流程,但对Redis分布式锁的全面理解仍有待深化。

1730

被折叠的 条评论
为什么被折叠?



