分布式锁的应用

ofeqx.com 方程式科技共享平台 外文资料好找好用。大数据有序化,
专业垂直领域体系的知识共享盘平台,发表您的创作与我们共产知识。

mysql zk redis
msql 加锁就是新增数据 解锁就是删除数据
redis 分布式锁
什么环境使用分布式锁
jdk 中的锁只能解决一个进程多线程的锁 jvm锁
思路
应用
场景
有缺点
redis 单进程 单线程
分布式锁 用在
1多进程
2进行同一个数据读写信息
3 操作数据互斥
加锁
通过setnx 向特定的key写入一个随机值,并同时是设置失效时间,写值成功既加锁成功
注意点
必须给锁设置一个失效时间 避免死锁(防止长时间不响应)
加锁时,每个节点产生一个随机字符串 避免锁误删除 (进行匹配防止解锁其他的锁)
写入随机值与设置失效必须同时的 保证加锁时原子的
解锁
匹配随机值 删除redis 的key 获取数据 判断 删除 原子一致性

在这里插入图片描述

在这里插入图片描述

这个脚本可以通过 EVAL …script… 1 resource-name token-value 命令来调用。

用脚本保证唯一性

异常处理
失效时间是程序的2倍时间
加锁使用 set
解锁 使用脚本
key 直接为 value 是用threadlocal 将随机值赋值到 local 里面

zookeeper
数据节点:持久节点 持久顺序节点 临时节点 临时顺序节点

zk 分布式锁

mysql 增加删除数据 或者版本号确保
redis setnx set 或者 脚本 确保
zk 节点确保

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值