实现分布式锁的两种方法

实现分布式锁的两种方法

分布式锁,在多节点场景下,还是比较常用的。所谓,本质上是顺序

既然是分布式的锁,那两个或多个服务之间必须用某个medium达成共识,这样才能确保顺序。就像在路口,红绿灯就是medium,决定了谁能先通过路口。

这样的medium可能是服务必须的,也可能是专门为实现分布式锁搭建的。这篇文章我们就来聊一下。


01 数据库


数据库就是这样一个天然的medium。一般来说,各个服务节点会使用同一个数据库,就如下图。

实现分布式锁的两种方法

大多数数据库都是支持事务的,而事务又具有ACID的属性。我们可以利用事务来锁定某行记录,来达到保证顺序的目的。

加锁即用for update 语句锁定某行记录,事务结束锁即释放。


02 Redis

Redis是非常常用的内存数据库,大多数应用都用Redis来做缓存,所以Redis也可以作为这样一个medium。并且Redis使用单线程处理数据,这使得其在实现分布式锁上很有优势。

加锁,在Redis 2.6.12以下的版本,实现安全的分布式锁需要使用lua脚本+SETNX+EXPIRE,在以上的版本中直接使用set指令即可。

至于解锁,则直接del对应的key即可。


你还知道又哪些方式可以实现分布式锁?可以在留言区留言讨论。

实现分布式锁的两种方法

——————–往期精彩——————–


原文始发于微信公众号(架构师手札):实现分布式锁的两种方法

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/234625.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!