一般实现分布式锁都有哪些方式?使用redis如何设计分布式锁?使用zk来设计分布式锁可以吗?这两种分布式锁的实现方式哪种效率比较高?
2024-08-28 08:40:17
#(1)redis分布式锁
官方叫做RedLock算法,是redis官方支持的分布式锁算法。
这个分布式锁有3个重要的考量点,互斥(只能有一个客户端获取锁),不能死锁,容错(大部分redis节点创建了这个锁就可以)
redis最普通的分布式锁的实现原理
RedLock算法
(2)zk分布式锁
zk分布式锁,其实可以做的比较简单,就是某个节点尝试创建临时znode,此时创建成功了就获取了这个锁;这个时候别的客户端来创建锁会失败,只能注册个监听器监听这个锁。释放锁就是删除这个znode,一旦释放掉就会通知客户端,然后有一个等待着的客户端就可以再次重新枷锁。
zookeeper的分布式锁原理
(3)redis分布式锁和zk分布式锁的对比
redis分布式锁,其实需要自己不断去尝试获取锁,比较消耗性能
zk分布式锁,获取不到锁,注册个监听器即可,不需要不断主动尝试获取锁,性能开销较小
另外一点就是,如果是redis获取锁的那个客户端bug了或者挂了,那么只能等待超时时间之后才能释放锁;而zk的话,因为创建的是临时znode,只要客户端挂了,znode就没了,此时就自动释放锁
redis分布式锁大家每发现好麻烦吗?遍历上锁,计算时间等等。。。zk的分布式锁语义清晰实现简单
所以先不分析太多的东西,就说这两点,我个人实践认为zk的分布式锁比redis的分布式锁牢靠、而且模型简单易用
最新文章
- C++ win32线程数上限
- ROS之VPN服务器设置教程.
- 解读Unity中的CG编写Shader系列四(unity中的圆角矩形shader)
- Js 数据容量单位转换(kb,mb,gb,tb)
- SIEBEL应用概述
- HTTP 笔记与总结(2 )HTTP 协议的(请求行的)请求方法 及 (响应行的)状态码
- 控制DIV占满屏幕
- BZOJ 1048 分割矩阵
- IE6下的怪异解析知识点补充
- Lua Table 操作
- Median of Two Sorted Arrays(Java)
- Delphi 2010下载+完美破解
- JSP第三篇【JavaBean的介绍、JSP的行为--JavaBean】
- java 事件处理
- 学习TensorFlow,保存学习到的网络结构参数并调用
- (转)Linux tcpdump命令详解
- Docker 使用官方镜像
- python3.7 安装pyqt5
- c++—— 函数重载(Overroad)
- [二十七]SpringBoot 之 Restful接口的跨域请求
热门文章
- socket通信框架——boost asio
- 文件描述符(File Descriptor)简介
- ForkJoinPool大型图文现场(一阅到底 vs 直接收藏)
- Java常用类:Scanner类
- Lambda 表达式简介
- Static Proxy
- bootstrap日期范围选择插件daterangepicker详细使用方法
- MySQL之九---分布式架构(Mycat/DBLE)
- 用于功率集成电路应用的600伏、10安、4H-SIC横向单沟道金属氧化物半导体场效应晶体管的演示和分析
- createNewFile() 报错 open failed: ENOENT (No such file or directory) 的解决方案