分布式锁,一般为了达到分布式加锁需要通过投票的机制,依次向所有节点申请加锁,半数以上节点投票通过完成加锁,可以避免单点故障(Redis称为Redlock算法)
* 加锁的动作需要保证原子性,Redis通过Lua脚本来保证
* 谁加的锁谁来释放锁,所以需要标记锁来源
* 预防加锁程序挂掉导致的锁不释放,所以需要设置过期时间
* 加锁成功需要判断获取锁总耗时没有超过锁有效时间,这才判定为加锁成功
注意:假如程序处理速度比锁过期时间要长,是不合理的设计,超时时间的设置就很精细,一般都是远大于处理的时间,如果真的处理时间太长应该判定失败并告警