攻城狮Chova
分布式锁分析:使用Redis实现分布式事务中的锁机制
原创
关注作者
前往小程序,Get
更优
阅读体验!
立即前往
腾讯云
开发者社区
文档
建议反馈
控制台
登录/注册
首页
学习
活动
专区
圈层
工具
文章/答案/技术大牛
搜索
搜索
关闭
发布
首页
学习
活动
专区
圈层
工具
返回腾讯云官网
攻城狮Chova
首页
学习
活动
专区
圈层
工具
返回腾讯云官网
社区首页
>
专栏
>
分布式锁分析:使用Redis实现分布式事务中的锁机制
分布式锁分析:使用Redis实现分布式事务中的锁机制
原创
攻城狮Chova
关注
修改于 2021-08-24 10:28:36
修改于 2021-08-24 10:28:36
744
0
举报
文章被收录于专栏:
攻城狮Chovas
攻城狮Chovas
分布式协调服务
Zookeeper是分布式协调服务框架
分布式协调技术:
主要用来解决分布式环境当中多个进程之间的同步控制,让进程有序的去访问某种临界资源,防止造成"脏数据"的后果
分布式协调技术的
核心
就是实现
分布式锁
分布式锁
分布式锁:
为了防止分布式系统中的多个进程之间相互干扰,需要分布式协调技术对进程进行调度,这个分布式协调技术的核心就是实现分布式锁
分布式锁条件
在分布式系统环境下,一个方法在同一时间只能被一个机器的一个线程执行
高可用的获取锁与释放锁
高性能的获取锁与释放锁
具备可重入特性
具备锁失效机制,防止死锁
具备非阻塞锁特性
分布式锁的实现
Zookeeper
Redis
Memcached
Chubby
Redis分布式锁的实现
分布式锁实现的三个核心要素:加锁,解锁,锁超时
Redis是单线程的
加锁
使用setnx命令
key是锁的唯一标识,按业务来决定命名
value可以设置成任意值
当一个线程执行setnx返回1,说明key原本不存在,该线程成功得到锁.当一个线程执行setnx返回0,说明key已经存在,该线程抢锁失败
解锁
当得到锁的线程执行完任务,需要释放锁,以便其它线程可以进入,使用del指令释放锁之后,其它线程就可以继续执行setnx命令获得锁
锁超时
一个得到所得线程在执行任务的过程中出现问题,不能显式释放锁,这些资源将永远被锁住,造成死锁的状态undefined
setnx的key要设置一个超时时间,保证锁没有被显式释放时,会在一定时间后自动释放.setnx不支持超时参数,需要额外的指令expire
Redis分布式锁问题:
非原子性操作:
解决方案:
通过使用set命令
set(key,value,expire)
设置为原子操作
误删锁:
在设置锁超时的情况下,操作没有完成,当操作完成时,del命令删除的是其它进程的锁
解决方案:
判断是否为本进程的锁.带着key和
value=threadID
线程ID判断是否为本进程的锁
在设置锁超时的情况下,操作没有完成
解决方案:
释放锁时判断操作是否完成,
增加守护线程:为锁超时加时,延迟释放
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系
cloudcommunity@tencent.com
删除。
分布式
云数据库 Redis®
分布式事务 dtf
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系
cloudcommunity@tencent.com
删除。
分布式
云数据库 Redis®
分布式事务 dtf
评论
登录
后参与评论
0 条评论
热度
最新
推荐阅读
目录
分布式协调服务
分布式锁
分布式锁条件
分布式锁的实现
Redis分布式锁的实现
加锁
解锁
锁超时
领券
问题归档
专栏文章
快讯文章归档
关键词归档
开发者手册归档
开发者手册 Section 归档
0
0
0
推荐