标签:必须 实现 索引 分布式 bsp 记录 计算 key 插入
方案1:数据库的唯一
原理:当想要获得锁时,就向表中插入一条记录,释放锁时就删除这条记录。唯一索引录只被插入一次,那么就可以用这个记录是否存在来判断是否存于锁定。
存在的问题
方案2:Redis 的 SETNX 指令
原理:使用 SETNX(set if not exist)指令插入一个键值对,如果 Key 已经存在,那么会返回
False,否则插入成功并返回 True。
EXPIRE 指令可以为一个键值对设置一个过期时间,从而避免了数据库唯一索引实现方式中释
放锁失败的问题。
方案3:Redis 的 RedLock 算法
原理:尝试从 N 个相互独立 Redis 实例获取锁,如果一个实例不可用,应该尽快尝试下一个。计算获取锁消耗的时间,只有当这个时间小于锁的过期时间,并且从大多数(N/2+1)实例上获取了锁,那么就认为锁获取成功了。如果锁获取失败,会到每个实例上释放锁。
方案4:Zookeeper 的有序节点
标签:必须 实现 索引 分布式 bsp 记录 计算 key 插入
原文地址:https://www.cnblogs.com/Spider-spiders/p/9688736.html