参考答案
结论:利用Redis单线程原子命令SET key value NX PX timeout加锁,获取锁失败则循环重试(自旋),并设置过期时间防死锁。原理:加锁使用SET lock:resource uuid NX PX 30000,仅当key不存在设置成功返回OK表示获锁;解锁用Lua脚本比对uuid防误删再DEL;自旋未获锁时短sleep重试,可加随机退避避免惊群;对比单机锁可跨进程分布式,但需考虑看门狗续期或Redlock;示例:while(!redis.setnx(...)){Thread.sleep(10);}。