千家信息网

zk和redis分布式锁有哪些区别

发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章给大家分享的是有关zk和redis分布式锁有哪些区别的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。Redis实现分布式锁根据lockKey区进行setnx(set
千家信息网最后更新 2025年11月08日zk和redis分布式锁有哪些区别

这篇文章给大家分享的是有关zk和redis分布式锁有哪些区别的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。

Redis实现分布式锁

根据lockKey区进行setnx(set not exist,如果key值为空,则正常设置,返回1,否则不会进行设置并返回0)操作,如果设置成功,表示已经获得锁,否则并没有获取锁。

2.如果没有获得锁,去Redis上拿到该key对应的值,在该key上我们存储一个时间戳(用毫秒表示,t1),为了避免死锁以及其他客户端占用该锁超过一定时间(5秒),使用该客户端当前时间戳,与存储的时间戳作比较。

3.如果没有超过该key的使用时限,返回false,表示其他人正在占用该key,不能强制使用;如果已经超过时限,那我们就可以进行解锁,使用我们的时间戳来代替该字段的值。

4.但是如果在setnx失败后,get该值却无法拿到该字段时,说明操作之前该锁已经被释放,这个时候,最好的办法就是重新执行一遍setnx方法来获取其值以获得该锁。

释放锁:删除redis中key

Zookeeper实现分布式锁

基于临时顺序节点:

1.客户端调用create()方法创建名为"locknode/guid-lock-"的节点,需要注意的是,这里节点的创建类型需要设置为EPHEMERAL_SEQUENTIAL。

2.客户端调用getChildren("locknode")方法来获取所有已经创建的子节点。

3.客户端获取到所有子节点path之后,如果发现自己在步骤1中创建的节点是所有节点中序号最小的,那么就认为这个客户端获得了锁。

4.如果创建的节点不是所有节点中序号最小的,那么则监视比自己创建节点的序列号小的最大的节点,进入等待。直到下次监视的子节点变更的时候,再进行子节点的获取,判断是否获取锁。

释放锁的过程相对比较简单,就是删除自己创建的那个子节点即可。

区别:

redis分布式锁,其实需要自己不断去尝试获取锁,比较消耗性能

zk分布式锁,获取不到锁,注册个监听器即可,不需要不断主动尝试获取锁,性能开销较小

另外一点就是,如果是redis获取锁的那个客户端bug了或者挂了,那么只能等待超时时间之后才能释放锁;而zk的话,因为创建的是临时znode,只要客户端挂了,znode就没了,此时就自动释放锁

感谢各位的阅读!关于zk和redis分布式锁有哪些区别就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到吧!

节点 客户 客户端 分布式 时间 就是 方法 最小 不断 内容 字段 序号 性能 时候 时限 更多 存储 尝试 监视 不错 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 想写一个关于网络技术的网页 台湾网络安全事件 广东标准软件开发市场报价 软件开发工程师考试题 扬州软件开发价格咨询 阳泉学校触摸签名软件开发公司 郑大一附院数据库错误 新华三网络安全产品负载均衡 国家网络安全宣传学校手抄报 ftp服务器是什么东西 ev是文摘型数据库吗 计算机网络技术动漫游戏 合肥的国企软件开发待遇 网络安全信号是什么意思 腾恒软件开发公司 个人网络安全发声承诺书 深圳通联网络技术服务有限公司 域名映射 内网服务器 大数据与计算机网络技术的区别 服务器端 php 网络安全风险识别与防护指南 数据库的问卷和结果怎么看 营口节能软件开发多少钱 网络安全千亿市场规模 gpu服务器租赁价目表 杭州直销软件开发收费多少 dnf服务器深渊测试 GSE不同数据库相关性校正图 管家婆什么版本自带数据库 机模导航数据库过期
0