文章目录

点九博客

努力成为Web全栈工程师!

X

限购、限流、幂等的思考

一、限购

1、场景

如一商品在一次活动中,规定每人限购两份。

2、分析

商城系统用户一般都会进行实名认证,我们可以根据用户证件号进行限购处理,

或者是用户的唯一ID标识,或者用户注册使用的手机号等。

在用户支付出单前,根据限购标识去数据库中查询一下有效订单数量,

如大于活动限购次数,不允许支付出单。

3、实现

  1. 在调用支付接口前,调用限购接口,符合购买条件,继续支付;不符合条件,提示并改变订单状态为无效。
  2. 在订单状态修改前,调用限购接口,符合购买条件,成功生成订单号;不符合条件,提示并做退款处理,订单设置为无效。

二、限流

1、场景

场景一:不同接口不同时间段限流

场景二:针对不同产品或者不同套餐限流

2、分析

场景一:不同接口的不同时间段限流,
如支付接口在中午12点到0点订单量较大,接口的限流白天时段可以开放大些。

0点以后可以少些,可以做到恶意防刷,当然你们系统肯定也有黑名单管控。

场景二:针对不同产品或者不同套餐限流

如针对产品进行不同限流,IPone 11 PRO Max手机活动中每人限购2个,手机壳每人限购5个。我们产品维度根据用户唯一ID进行并发数限制。

3、实现

场景一:每个接口请求前,判断是否超出最大流量限制。

场景二:在调用下单接口前,判断用户ID是否超出该产品允许的最大并发数(此时一般为并发数)。

三、幂等

1、场景

每次请求流水号不同,相同流水号的请求,返回相同的响应信息。

2、分析

做请求幂等处理

幂等字段 默认流水号(可自定义用户ID或者证件号或IP+手机码等)

报文类型 默认JSON字符串 (可以是XML)

限购份数 默认为1(每人每次允许发起的最大请求次数)

缓存时间 默认一小时 (根据幂等字段查询缓存数据,返回已有重复请求)可以是活动的最大时间

3、实现

基于自定义注解实现


公众号 码农点九
微信号 co_dianjiu
文章作者:码农点九
原文地址:限购、限流、幂等的思考
开源地址:https://gitee.com/dianjiu
                 https://github.com/dianjiu