开发者社区> 问答> 正文

关于Redis实现分布式锁

redis master实例宕机的时候,可能导致多个客户端同时完成加锁,这种情况怎么解决?


来源:云原生后端社区
https://www.yuque.com/server_mind/answer

展开
收起
Atom 2020-04-25 16:02:05 832 0
1 条回答
写回答
取消 提交回答
  • 我们的解决办法是单独有一台redis负责分布式锁,这台机器4核16G PCIESSD,并且只负责分布式锁这一项业务,不允许存其它的任何数据,也不允许有slave节,所有的锁都只信任这一台机器的结果,如果这台机器宕机了,那业务也跟着挂,挂了也就是加锁失败,1秒内获取锁失败达到1000次,会触发我们的告警信息,这时候就需要人工介入了。
    我们加锁是分了2层的,分布式节点内部先加锁,内部获取到锁之后再去竞争分布式锁(用一个CopyOnWriteArraySet做锁,将要操作的对象做key向这个对象add,add成功即表示拿到节点内部锁,再去竞争分布式锁,这个key我们有长度限制,不允许大于64字节,大于64字节的全部md5之后加上当前对象的部分特征即可),这样到真正这台机器时的竞争量已经很低很低了(基本上我们的统计结果是同时到达这台机器竞争分布式锁的只有节点个数那么多台机器了,最惨的情况也只有分布式节点数的2倍多点),这套系统并发7000到10000,峰值30000,但是这台机器已稳定运行2年多,从未触发过警告和宕机,很傲娇,这套体系出自我之手,笨办法,但相对实用


    来源:云原生后端社区
    https://www.yuque.com/server_mind/answer

    2020-04-25 16:02:34
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Redis在唯品会的应用实践——架构演进与功能定制 立即下载
微博的Redis定制之路 立即下载
云数据库Redis版的开源之路 立即下载