当前位置:网站首页>场景化面试:关于分布式锁的十问十答
场景化面试:关于分布式锁的十问十答
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章
- 分布式锁:所有的分布式锁都是错误的?
- 分布式锁:关键重地,非请勿入
- 如何设计更优的分布式锁?
关于我

边栏推荐
- AITM 2-0003 水平燃烧试验
- uni-app 蓝牙通信
- Using webassembly to operate excel on the browser side
- 示波器探头对信号源阻抗的影响
- Simple getting started example of Web Service
- Haas506 2.0 development tutorial - Alibaba cloud OTA - PAC firmware upgrade (only supports versions above 2.2)
- int GetMonth( ) const throw( );后面的throw( )什么意思?
- 2022-07-03-cka- latest feedback from fans
- vant 源码解析 之深层 合并对象 深拷贝
- @Validated basic parameter verification, grouping parameter verification and nested parameter verification
猜你喜欢
PVC plastic sheets BS 476-6 determination of flame propagation properties
Five layer network protocol
冯唐“春风十里不如你”数字藏品,7月8日登录希壤!
Teach yourself to train pytorch model to Caffe (I)
Why can't Chinese software companies produce products? Abandon the Internet after 00; Open source high-performance API gateway component of station B | weekly email exclusive to VIP members of Menon w
张丽俊:穿透不确定性要靠四个“不变”
Golang(1)|从环境准备到快速上手
阿里云有奖体验:用PolarDB-X搭建一个高可用系统
Haas506 2.0 development tutorial - Alibaba cloud OTA - PAC firmware upgrade (only supports versions above 2.2)
Influence of oscilloscope probe on measurement bandwidth
随机推荐
ODPs next map / reduce preparation
Deep merge object deep copy of vant source code parsing
Some things make feelings nowhere to put
Influence of oscilloscope probe on measurement bandwidth
事项研发工作流全面优化|Erda 2.2 版本如“七”而至
Access Zadig self-test environment outside the cluster based on ingress controller (best practice)
LeetCode_哈希表_困难_149. 直线上最多的点数
股票开户选择哪家证券公司比较好哪家平台更安全
EN 438-7建筑覆盖物装饰用层压板材产品—CE认证
Get JS of the previous day (timestamp conversion)
基于vertx-web-sstore-redis的改造实现vertx http应用的分布式session
php中explode函数存在的陷阱
CLion配置visual studio(msvc)和JOM多核编译
postgis 安装地理信息扩展
第05章_存储引擎
Clion-MinGW编译后的exe文件添加ico图标
one hundred and twenty-three thousand four hundred and fifty-six
"Grain mall" -- Summary and induction
Is it necessary for bazel to learn
Pytoch practice -- MNIST dataset handwritten digit recognition