面试真题

数据库 · 中等 · 字节跳动

Redis自旋锁如何实现?

中等 数据库 🎤 字节跳动
参考答案
结论:利用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);}。
题目整理自公开面经,答案由校招宝自研生成,仅供参考