当前位置:网站首页>场景化面试:关于分布式锁的十问十答
场景化面试:关于分布式锁的十问十答
2022-07-05 21:26:00 【InfoQ】
- 互斥性:在分布式高并发条件下,同一时刻只有一个线程可以获得锁。
- 超时机制:锁服务和请求锁的服务分散在不同的机器上面,它们之间是通过网络来通信的,所以我们需要用超时机制,来避免获得锁的节点故障或者网络异常,导致它持有的锁不能释放,出现死锁的情况。
- 可重入性:一个节点的一个线程如果已经获得这把锁,那么这个线程在持有锁的期间,可以再次成功获取锁。
- 公平性:根据具体的实现,锁可以分为公平锁和非公平锁,假如目前有三个线程在竞争同意把锁,线程 A 成功获得锁,线程 B 和线程 C 没有获取到并阻塞等待 A 释放锁,且线程 B 先于线程 C 阻塞等待,那么在线程 A 释放锁后,这把锁会被等待时间最长的线程 B 获得,按照先来先得的原则,那么这把锁就是公平锁,反之就是非公平锁。
- 完备的锁接口:即锁的接口定义中,加锁操作要同时提供阻塞式接口 lock 和非阻塞式接口 tryLock,解锁操作要提供 release 接口。
- 基于关系型数据库(例如 MySQL):创建一张表用于记录共享资源信息,对临界资源做唯一性约束,通过增加一条记录来对某个资源加锁,通过删除记录释放锁。
- 基于分布式缓存 Redis :通过调用 Redis 函数 SETNX+EXPIRE 实现,同时为了保证原子性,可以通过 Lua 脚本来实现锁的设置和过期时间的原子性。在 Redis 2.6.12 版本后 SETNX 增加了过期时间参数,也可以直接使用这个重载方法。SETNX 方法返回 1 表示获得 key 所代表的锁,返回 0 表示获取锁失败
- 基于分布式协调服务 ZooKeeper :在对应的持久节点 shared_lock 的目录下为每个进程创建一个临时顺序节点,然后查看哪个进程对应的节点编号最小,最小说明式最先创建的,因此获得锁,否则,等待最小编号节点释放锁。
参考资料
- 《高性能Java架构:核心原理与案例实战》第12章
- 分布式锁:所有的分布式锁都是错误的?
- 分布式锁:关键重地,非请勿入
- 如何设计更优的分布式锁?
关于我

边栏推荐
- EasyExcel的讀寫操作
- 显示器要申请BS 476-7 怎么送样?跟显示屏一样吗??
- Generics of TS
- Realize the function of verifying whether the user has completed login when browsing the page
- 力扣------经营摩天轮的最大利润
- Introduction of ArcGIS grid resampling method
- 思特奇加入openGauss开源社区,共同推动数据库产业生态发展
- Haas506 2.0 development tutorial - Alibaba cloud OTA - PAC firmware upgrade (only supports versions above 2.2)
- 123456
- Sophomore personal development summary
猜你喜欢

Enclosed please find. Net Maui's latest learning resources

Uni app Bluetooth communication

【案例】定位的运用-淘宝轮播图

EasyExcel的读写操作

Clion-MinGW编译后的exe文件添加ico图标

Introduction of ArcGIS grid resampling method

Pytorch实战——MNIST数据集手写数字识别

Access Zadig self-test environment outside the cluster based on ingress controller (best practice)
![[case] Application of positioning - Taobao rotation map](/img/2d/c834ce95a2c8e53a20e67fa2e99439.png)
[case] Application of positioning - Taobao rotation map

冯唐“春风十里不如你”数字藏品,7月8日登录希壤!
随机推荐
ESP32
Interviewer: will concurrent programming practice meet? (detailed explanation of thread control operation)
Objects in the list, sorted by a field
leetcode:1755. Sum of subsequences closest to the target value
Hdu2377bus pass (build more complex diagram +spfa)
XML modeling
面试官:并发编程实战会吗?(线程控制操作详解)
Add ICO icon to clion MinGW compiled EXE file
PostGIS installation geographic information extension
EasyExcel的读写操作
Cross end solution to improve development efficiency rapidly
Five layer network protocol
selenium 查找b或p标签的内容
Parker driver maintenance COMPAX controller maintenance cpx0200h
校招期间 准备面试算法岗位 该怎么做?
Deep merge object deep copy of vant source code parsing
【日常训练--腾讯精选50】89. 格雷编码(看题解才会的)
ODPs next map / reduce preparation
Arcgis\qgis no plug-in loading (no offset) mapbox HD image map
Comprehensive optimization of event R & D workflow | Erda version 2.2 comes as "7"