详解使用Goalng+Redis实现分布式锁
Redis实现分布式锁
前言
分布式锁的实现有三种方式
- 数据库乐观锁
- 基于Redis的分布式锁
- 基于Zookeeper的分布式锁
分布式锁满足的条件
为了确保分布式锁可用,我们至少要保证锁的实现同时满足以下几个条件
- 互斥性:在任意时刻只有一个客户端能持有锁
- 不会死锁:即使有一个客户端在持有锁的期间发生崩溃而没有主动解锁,也能保证后续其它客户端能加锁
- 容错性:只要大部分的Redis节点正常运行,客户端就可以加锁和解锁
- 解铃还须系铃人:加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解除
加锁代码
正确示例
Talk is cheap, show me the code。先展示代码,再带大家慢慢解释为什么这样实现:
package mainimport ("github.com/gomodule/redigo/redis"
)const (LOCK_SUC