系列文章目录

【redis】redis分布式锁(一)手写分布式锁1.0~6.0
【redis】redis分布式锁(二)可重入锁+设计模式



前言

在这里插入图片描述


一、CAP

在这里插入图片描述

redis集群 AP

在主节点set的值,但是在复制给从机过程中宕机了,这时候从机上位是不能获取这个值的
在这里插入图片描述

ZooKeeper集群 CP 数据一致性

CP:
在这里插入图片描述
故障:牺牲了高可用,即在一台master宕机后,选举新master时,zk服务不可用
在这里插入图片描述

Eureak集群 AP

AP:
在这里插入图片描述

nacos集群 AP

在这里插入图片描述

二、lua脚本

脚本:if redis.call('HEXISTS',KEYS[1],ARGV[1]) == 1 then return redis.call('expire',KEYS[1],ARGV[2]) else return 0 end

在这里插入图片描述


三、融合进业务类

在锁的代码
在这里插入图片描述

在这里插入图片描述
主线程代码
在这里插入图片描述
执行:
在这里插入图片描述


四、redis分布式锁的总结

在这里插入图片描述

V1.0 和 V2.0 单机锁

在这里插入图片描述

V3.0 和 V4.0 finally删除锁、自旋、过期时间、lua脚本保证原子化执行

在这里插入图片描述

V5.0 和 V6.0 5.0删除锁时需要同时判断锁是否为自己的,6.0unlock用到lua脚本原子化执行。至此,小厂可以使用V6.0版本。

在这里插入图片描述

V7.0 可重入锁 使用hset来替代原来的setnx、lua脚本、以及实现Lock接口的AQS规范、工厂模式的引入

在这里插入图片描述
在这里插入图片描述

V8.0 自动续期 保证锁在业务类执行期间不会过期,自动续期


Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐