为什么需要分布式锁
-
用户下单
锁住 uid,防止重复下单。
-
库存扣减
锁住库存,防止超卖。
-
余额扣减
锁住账户,防止并发操作。 分布式系统中共享同一个资源时往往需要分布式锁来保证变更资源一致性。
分布式锁需要具备特性
-
排他性
锁的基本特性,并且只能被第一个持有者持有。
-
防死锁
高并发场景下临界资源一旦发生死锁非常难以排查,通常可以通过设置超时时间到期自动释放锁来规避。
-
可重入
锁持有者支持可重入,防止锁持有者再次重入时锁被超时释放。
-
高性能高可用
锁是代码运行的关键前置节点,一旦不可用则业务直接就报故障了。高并发场景下,高性能高可用是基本要求。
实现 Redis 锁应先掌握哪些知识点
-
set 命令
SET key value [EX seconds] [PX milliseconds] [NX|XX]
-
EX
second :设置键的过期时间为 second 秒。 SET key value EX second 效果等同于 SETEX key second value 。 -
PX
millisecond :设置键的过期时间为 millisecond 毫秒。 SET key value PX millisecond 效果等同于 PSETEX key millisecond value 。 -
NX
:只在键不存在时,才对键进行设置操作。 SET key value NX 效果等同于 SETNX key value 。 -
XX
:只在键已经存在时,才对键进行设置操作。