- 锁粒度:锁到资源 ID(lock:order:42),不要一把全局锁串行化所有请求
- 重入:同一执行流重复加锁需计数(Hash 存 token->次数),否则自己把自己锁死
- 误删:释放必须校验 token,见安全释放条目
- 续期:TTL 要覆盖 P99 耗时,长任务配看门狗
- 集群:锁 key 与业务 key 用同一 hash tag 保持同槽,避免 CROSSSLOT
- 兜底:锁只降低并发概率,关键写入用唯一索引/版本号/fencing 拒旧值
fencing token 思路
fencing token 思路
# 用单调递增编号作为「代际」,下游只接受更大编号
INCR lock:job:fence # -> 7
# 携 token=7 写库;存储层记录 max_seen:编号 <= max_seen 的写入一律拒绝
UPDATE jobs SET data='...', fence=7 WHERE id=42 AND fence < 7TTL 与业务耗时关系:TTL 太短=频繁双持有者;TTL 太长=宕机后人工介入窗口大。常见折中是 TTL 10-30s + 看门狗。