步调用户行为前端服务端逻辑数据库操作1用户A点击“编辑”按钮发送/lock请求,携带票据ID检查当前票据状态: 若status=0,更新为status=1,记录lock_by和lock_timeUPDATE table SET status=1, lock_by='A', lock_time=NOW() WHERE id=123 AND status=02用户A编辑表单表单展示,禁用其他用户操作入口保持锁定状态无3用户A提交保存发送保存请求,携带修改数据更新票据数据,并释放锁(status=0)UPDATE table SET ..., status=0 WHERE id=123 AND lock_by='A'4用户B尝试编辑同一票据发送/lock请求检查状态:status=1,返回“票据已超时释放锁
后台定时使命:每隔N分钟扫描lock_time超时的票据,自动释放锁:
UPDATE table SET status=0
WHERE status=1 AND lock_time < NOW() - INTERVAL '5 MINUTE';
复制代码
伪代码
1. 服务端锁定逻辑(伪代码)
def lock_order(order_id, user_id):
# 原子操作:尝试锁定
updated = execute_sql(
"UPDATE orders SET status=1, lock_by=%s, lock_time=NOW() "
"WHERE id=%s AND status=0",
[user_id, order_id]
)
if updated == 0:
# 获取当前锁定者信息
locked_by = execute_sql(
"SELECT lock_by FROM orders WHERE id=%s", [order_id]