653 B
653 B
要求
- 有高可用的获取锁和释放锁的功能
- 获取锁和释放锁的性能要好
- 锁要是可重入锁(避免死锁)
- 阻塞锁(根据业务考虑)
- 公平锁(根据业务考虑)
基于数据库
数据库表主键唯一性
多个请求到达数据库,数据库保证只有一个插入成功
通过数据库 mmvc 实现
基于 redis
redis 实现
set key value nx px milliseconds
过期时间设置 2-3 s 左右 value 随机值(uuid),只能由加锁线程解锁 解锁使用 lua 脚本 get value,delete 操作,解锁时必须 uuid 一致