🐘 巨象 AI 前沿雷达 🪐 巨象在火星 · MARS OUTPOST← 返回巨象雷达主站
Dev.to2026-10-31 17:14AI 生成

锁不是万能,数据库唯一约束才是最后一道防线!同一笔钱被扣两次?支付回调并发翻车,这套 Redis 锁方案把重复扣款按死了

支付平台普遍「至少投递一次」,网络抖动或超时重试会让同一笔回调同时打到多个线程,没做好幂等就可能把用户的钱扣两遍。

大白话支付服务商为了保证不漏单,同一条回调消息可能重复发好几次,甚至同时打到你的多个服务实例上。如果代码没做防护,两个线程同时处理同一笔交易,就可能插两条记录、给用户扣两次钱。这篇 Dev.to 教程给了一套组合拳:先用 Redis 的 SET NX EX 抢一把按交易号命名的锁,抢不到的直接回 200 让支付方别再重试;释放锁时用 Lua 脚本核对令牌,防止误删别人的锁;最后数据库再给交易号加唯一约束兜底。
对你意味着做支付、电商、订阅扣费的后端同学直接抄作业;普通用户也能理解为什么「重复扣款」这种事故总在发生。

原文:Preventing Double-Billing from Concurrent Payment Webhooks: A Practical Guide to Redis Distributed Locks and Multi-Layered Idempotency

打开巨象雷达,看今天全部 AI 动态