周三下午的技术分享会上,有人突然提到"幂等性"和"最终一致性"。满屋子人都在点头,只有你一边微笑一边疯狂搜索——这词到底什么意思?为什么没人好好解释过。
如果你写过一两年代码,能搭REST接口、懂数据库、搜过47次"CORS报错怎么修",这篇文章就是写给你的。
![]()
一、幂等性:所有人都在假装懂的那个词
幂等性说白了就一句话:同一个操作执行多次,结果和执行一次一样。
真正要命的地方在支付接口。用户点"立即付款",请求半路断了,App自动重试。如果你的接口不幂等——对,扣了两次钱。 angry customer + 工单 + 糟糕的一天。
解法是给每个请求带一个唯一标识(幂等键),服务器一看:"哦这个处理过了,直接返回上次结果。"Stripe这么干的,Stripe讲得清楚,大部分教程不讲。现在你知道了。
二、N+1查询问题:数据库在无声尖叫
这题我会,我曾经无脑写了六个月N+1查询。
场景:取100个用户列表,再逐个取他们的资料。代码里看着挺顺,数据库日志里惨不忍睹——1次查用户,100次查资料,共101次查询。这就是N+1。
App能跑,就是慢。规模上去之后真的慢。DBA在默默崩溃。
解法是预加载(eager loading),让ORM一次性JOIN查完。Rails用includes,Django用select_related,其他框架都有等价物,你得知道它存在。
Django Debug Toolbar、Laravel Debugbar会用红色标出这个问题。用它们。求你了。
三、数据库事务:不只有银行用得上
事务的核心就一句:要么全成,要么全不成。
经典场景:转账。A账户扣款成功,B账户入账失败——钱没了,去哪了不知道。好系统。
事务把多个操作包在一起,成功一起成功,中间断了就回滚,一切恢复原状。
没人讲的是ACID——原子性、一致性、隔离性、持久性。听着像课本,其实就回答四个问题:
原子性:操作能拆吗?不能,要完整执行。
一致性:数据能对不上吗?不能,规则得守。
隔离性:并发会互相干扰吗?不会,各干各的。
持久性:写完会丢吗?不会,落盘才放心。
这三个概念, senior dev 每次被问都会叹气。不是不想教,是教程要么太抽象,要么假设你已经懂。现在你可以不用点头装懂了。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.