【大厂必备】系列之Redis分布式锁

本文介绍了Redis分布式锁的概念、实现方式及其存在的问题,包括锁超时、非原子性SETNX和EXPIRE、超时后误删其他线程的锁等,并探讨了在集群模式下的RedLock算法,强调了在大厂面试和工作中掌握分布式锁的重要性。
摘要由CSDN通过智能技术生成

上期文章我们聊了一下**【大厂必备】系列之Redis雪崩、击穿、穿透**,相信大家一定收获满满,这些可是进入大厂的必备板砖啊,这期我们接着放大招,来聊聊让人胆颤心惊的Redis分布式锁,哈哈哈……

在这里插入图片描述

生活中,锁一般是被用于隔离两个空间或物体,比如,你用一把锁把你的心爱的宝贝锁起来,以防别人窃走。而在计算机世界里,因为资源往往是有限的,多个用户或请求同时请求某一资源,就会出现资源竞争问题,所以,锁主要是用来解决资源共享的问题。

分布式锁就是专门用来解决分布式应用之间共享资源的高并发问题。目前业界主流的实现方式有基于ZooKeeperRedis两种,这篇我们主要介绍基于Redis的分布式锁。

分布式锁是什么

我们知道,随着互联应用的发展,单个服务器很难抗住所有压力,这时候就需要把功能分布到不同的机器上面,而在分布式环境下,基于本地单机的锁是无法控制分布式系统中分开部署客户端的并发行为,所以需要分布式锁。

实现分布式锁必须同时满足的四个条件:

1)互斥性,在任意时刻,只有一个客户端能持有锁;

2)不会发生死锁,即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其它客户端能加锁;

3)容错性,只要大部分的Redis节点运行正常,客户端就可以加锁和解锁;

4)加锁和解锁必须是同一个客户端

Redis分布式锁的实现

Redis中主要通过SETNX命令来实现分布式锁的功能,

格式如下:

SETNX key value

如果不存在,则设置key为保存的字符串,在这种情况下,它等于SET,当已经有值的时候,不执行任何操作;

返回值:

1 已设置了key
0 未设置key

示例:

redis> SETNX mykey "Hello"
(integer) 1
redis> SETNX mykey "World"
(integer) 0
redis> GET mykey
"Hello"
redis> 

SETNX底层源码

这是分布锁SETNX指令最底层的源码(t_stri

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值