请各位大佬帮忙看看我的思路是不是有问题,如果能抛砖引玉得到更完善的思路那就更好了
我目前的思路是:
client 生成随机 token + 超时时间,用 setnx 获取锁
若获取成功则另外建立 readonly
的连接去读取锁所在的 master 节点对应的 slave 节点(假设有 N 个),检测是否同步锁同步成功(防止在同步前 master crash,slave 对外服务导致可以同时有两个 client 获取锁)当发现 N/2 + 1 的 slave 同步成功后停止检查返回成功
释放锁则使用 lua script 来做,只有在客户端 token 值等于锁当前值时才能释放锁(若持有锁的 client crash 了则等到超时自动释放),释放锁后同获取锁时一样检查 slave 内对应值是否还为 token 值,如果还为 token 值则认为锁没有释放成功
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.