分布式结构系列:分布式锁

本文详细介绍了分布式锁的概念、目的和设计原则,并对比了redis和zookeeper在单机和集群环境下的分布式锁实现,强调了它们的优缺点,如redis的读写性能强但可能存在数据一致性问题,而zookeeper则提供了高可靠性和读写锁功能,但可能面临性能瓶颈。
摘要由CSDN通过智能技术生成

常用的分布式锁

1、redis 对应的开源jar包:redisson
2、zookeeper 对应的开源jar包:curator

使用锁的目的

保证共享资源在同一时间只有只有一个客户端对共性资源进行操作,在高并发的环境下保证同一时间只有一个线程操作共享数据,
根据我自身所阅读的文章总结使用锁or分布式锁
1. 提升效率
采取锁定可以避免不必要的执行相同的工作
2. 提升正确性
采取锁可以更好的规范排列线程之间的关系

分布式锁设计原则
  1. 互斥性,同一时间只有一个线程持有锁
  2. 容错性,即使某一个持有锁的线程,异常退出,其他线程任然可以获得锁
  3. 隔离性,线程只能解自己的锁不能解其他线程的锁

单机分布式锁对比

redis

先说加锁,根据redis官网文档的描述,使用下面的命令加锁

SET resource_name my_random_value NX PX 30000
my_random_value是由客户端生成的一个随机字符串,相当于是客户端持有锁的标志

NX表示只有当resource_name对应的key值不存在的时候才能SET成功,相当于只有第一个请求的客户端才能获得锁

PX 30000表示这个锁有一个30秒的自动过期时间。

至于解锁,为了防止客户端1获得的锁,被客户端2给释放,采用下面的Lua脚本来释放锁

if redis.call(“get”,KEYS[1]) == ARGV[1] then
return redis.call(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鹏鹏与丁满

一分也是爱,哈哈哈哈哈

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值