#(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的分布式锁牢靠、而且模型简单易用

最新文章

  1. C++ win32线程数上限
  2. ROS之VPN服务器设置教程.
  3. 解读Unity中的CG编写Shader系列四(unity中的圆角矩形shader)
  4. Js 数据容量单位转换(kb,mb,gb,tb)
  5. SIEBEL应用概述
  6. HTTP 笔记与总结(2 )HTTP 协议的(请求行的)请求方法 及 (响应行的)状态码
  7. 控制DIV占满屏幕
  8. BZOJ 1048 分割矩阵
  9. IE6下的怪异解析知识点补充
  10. Lua Table 操作
  11. Median of Two Sorted Arrays(Java)
  12. Delphi 2010下载+完美破解
  13. JSP第三篇【JavaBean的介绍、JSP的行为--JavaBean】
  14. java 事件处理
  15. 学习TensorFlow,保存学习到的网络结构参数并调用
  16. (转)Linux tcpdump命令详解
  17. Docker 使用官方镜像
  18. python3.7 安装pyqt5
  19. c++—— 函数重载(Overroad)
  20. [二十七]SpringBoot 之 Restful接口的跨域请求

热门文章

  1. socket通信框架——boost asio
  2. 文件描述符(File Descriptor)简介
  3. ForkJoinPool大型图文现场(一阅到底 vs 直接收藏)
  4. Java常用类:Scanner类
  5. Lambda 表达式简介
  6. Static Proxy
  7. bootstrap日期范围选择插件daterangepicker详细使用方法
  8. MySQL之九---分布式架构(Mycat/DBLE)
  9. 用于功率集成电路应用的600伏、10安、4H-SIC横向单沟道金属氧化物半导体场效应晶体管的演示和分析
  10. createNewFile() 报错 open failed: ENOENT (No such file or directory) 的解决方案