分布式锁,在多节点场景下,还是比较常用的。所谓锁,本质上是顺序。
既然是分布式的锁,那两个或多个服务之间必须用某个medium达成共识,这样才能确保顺序。就像在路口,红绿灯就是medium,决定了谁能先通过路口。
这样的medium可能是服务必须的,也可能是专门为实现分布式锁搭建的。这篇文章我们就来聊一下。
01 数据库
数据库就是这样一个天然的medium。一般来说,各个服务节点会使用同一个数据库,就如下图。
大多数数据库都是支持事务的,而事务又具有ACID的属性。我们可以利用事务来锁定某行记录,来达到保证顺序的目的。
加锁即用for update 语句锁定某行记录,事务结束锁即释放。
02 Redis
Redis是非常常用的内存数据库,大多数应用都用Redis来做缓存,所以Redis也可以作为这样一个medium。并且Redis使用单线程处理数据,这使得其在实现分布式锁上很有优势。
加锁,在Redis 2.6.12以下的版本,实现安全的分布式锁需要使用lua脚本+SETNX+
,在以上的版本中直接使用set指令即可。EXPIRE
至于解锁,则直接del对应的key即可。
你还知道又哪些方式可以实现分布式锁?可以在留言区留言讨论。
——————–往期精彩——————–
原文始发于微信公众号(架构师手札):实现分布式锁的两种方法
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/234625.html