幂等性(Idempotence)是指一个操作可以重复执行多次,但结果总是相同的。
在电商系统中,确保关键操作的幂等性是防止重复下单的重要手段。
其实现在的程序员大多参加工作之前接受培训就已经知道相关术语了,在我那个时候,很多程序员刚工作都不清楚什么叫幂等性。
甚至有很多程序员因为不在互联网公司工作,几年下来都不清楚。
假设我们在提交订单时,系统会生成一个唯一的订单号,并将订单状态保存到数据库中。
每次用户提交订单时,系统首先检查该订单号是否已经存在,如果存在则直接返回订单结果,避免重复处理。
技术方案
方案一:前端控制——提交按钮置灰
前端控制是指在用户提交订单后,将提交按钮置灰,禁止用户再次点击。
这个方法简单直观,但只适用于低并发场景,无法完全解决问题。
方案二:请求唯一ID与数据库索引
通过为每个订单请求生成唯一ID,并在数据库中建立唯一索引,确保每个请求只能处理一次。
方案三:Redis分布式锁
Redis分布式锁是一个高效的并发控制手段,可以确保同一时间只有一个请求在处理。
截至目前为止,主流依然是Redission,历史文章也有关于这个的讲解,可以自己去看。
方案四:Token机制
Token机制通过在用户提交订单时生成唯一的Token,确保每个订单请求都有唯一标识。
这个其实一般会和Redis结合使用,效果更佳。
实战案例
还是以电商平台在高并发场景下实施防重复下单策略作为案例,通过Redis分布式锁
和Token机制
,降低重复下单率。
伪代码如下:
其实很简单,代码不是主要的,核心还是思想。
在高并发环境下,技术、产品和运营团队需要协同作战
,共同解决这一问题。
最后说一句(求关注!别白嫖!)
如果这篇文章对您有所帮助,或者有所启发的话,求一键三连:点赞、转发、在看。
关注公众号:woniuxgg,在公众号中回复:笔记 就可以获得蜗牛为你精心准备的java实战语雀笔记,回复面试、开发手册、有超赞的粉丝福利!