分布式锁5种特性、4个雷区、三种对比及详细脑图总结

本文总结了分布式锁的实现方式,包括基于数据库、ZK和Redis的实现,并强调了分布式锁应具备的互斥性、锁失效机制等5种特性,同时指出了4个使用雷区如死锁、锁误删等问题。文中还对比分析了这三种分布式锁的性能和安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分布式锁总结

分布式锁实现方式

在分布式系统中,为了保证同一时间只能由一个客户端对共享资源操作,我们通常采用加锁来实现,常见有三种方式:

  • 基于数据库实现的分布式锁
  • 基于ZK实现的分布式锁
  • 基于redis实现的分布式锁

对一个分布式锁的调研,我们可以从以下5种特性和4个雷区来考量,一个分布式锁没有绝对的好与坏,只有是否满足你的需求。

分布式锁需具备5种特性

  • 互斥性:当一个线程/进程加锁成功后,其他线程/进程无法加锁,具有排他性。
  • 锁失效机制:加锁成功后,应用服务器宕机导致锁未能释放,服务恢复后一直获取不到锁。应设置超时时间,防止出现类似死锁情况。
  • 阻塞锁(可选):当前资源已被加锁,其他线程/进程来加锁是否阻塞等待,还是立即返回。
  • 可重入性(可选):当前锁的持有者是否能再次进入。
  • 公平性(可选):加锁顺序和请求加锁顺序是否一致,还是随机抢锁。

分布式锁4个雷区

  • 死锁:加锁成功后,不知什么原因导致服务器出现宕机,未能成功释放,出现死锁。正确做法:设置超时时间
  • 锁误删:只有持有当前锁的线程,才能删除锁,即:解铃还需系铃人。正确做法:唯一id标识当前线程
  • 锁超时并发执行:加锁成功后,由于代码执行非常耗时、下游服务执行慢、调用链太长或GC耗时等原因导致锁超时,其他线程获得锁出现并发执行。
  • 集群容错:成功在master加锁,未能及时同步到slave节点,此时出现脑裂存在多个master节点,其他节点也可以加锁成功。

3种分布式锁对比

我们从性能和安全两个方面来对比下这三种分布式锁,如下:

对比项

基于redis分布式锁

基于zk分布式锁

基于DB分布式锁

性能

稍差(动态增删节点)

安全

差(Master宕机导致超时并发问题)

稍差(GC停顿导致超时并发问题)

3种分布式锁总结

  • 基于redis实现的分布式锁

  • 基于zk实现的分布式锁

  • 基于数据库实现的分布式锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嗨,您好

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值