从零到一编码实现Redis分布式锁

2022-09-19 11:42:10 浏览数 (1)

: 不是有redission等现成工具吗?咋不用? : 不,我就想自己写一个! 陈建斌说 : 你这个男的怎么回事 ?!

有的同学,就是这么尿性。也能理解,不自己弄一下,怎么能理解透彻,那就一起来搞一下呗!

使用场景和选型

分布式多节点的部署方式,使得共享变量有可能被同时操作,遇到有数据一致性要求的情况,就需要采取全局锁定的措施来保障并发操作下的一致性要求,如,库存扣减操作、同一个商品的上下架和更新操作等等。

常见的,分布式锁采用ZookeeperRedis来实现。怎么取舍呢?

zookeeper

redis

加锁原理

创建节点,节点已存在时创建失败

插入数据,数据已存在则设置失败

过期保护

节点类型为临时节点,断连删除

设置过期时间,到期删除

优点

在加锁失败时,zk的注册通知更优雅

速度快,性能高

缺点

只有leader负责写,然后通知flower,性能较差

抢锁失败时,需要自旋循环尝试

生产环境下,性能往往被优先考虑,相比较各自的优缺点,综合考虑,我们一般更倾向于redis。

从0到1 实现分布式锁

step1: 加锁 和 解锁的基础能力构建

Jedis.set(key, value, params)

0 人点赞