redis实现的分布式锁RedLock算法,分布式锁,即在多个master上获取同一个锁
1.in order to get the lock,the client get the current ms time
2.顺序对n个实例获取锁权限(n个都是master),尝试锁时,设置连接超时时间,防止由于实例挂了,导致长时间无法执行操作
3.计算为了获取锁消耗的时间,有且仅有,client获取了超过半数个机器的锁,且获取锁消耗的时间小于锁的有效期,就被认为client获取了锁
4.锁被获取后,其合法的持续时间为:初始设置的有效时间-为了获取锁消耗的时间
5.如果client由于某些原因没有成功获取锁,它会解锁所有master实例(即使有的实例它不可能锁成功)
不同的实现
1.client端分区:client直接选取正确的redis
2.代理辅助分区:client请求proxy,proxy forward正确的redis,并返回结果给client
3.查询路由;client随机发给一个redis,redis forward query to right node,也有redis查询路由后,返回正确的redis地址,客户端再去正确的redis取,但是这样会多请求一次redis