head:

2022-11-06 浏览 (639)

title: 如何优雅地处理重复请求(并发请求) shortTitle: 如何优雅地处理重复请求(并发请求) description: 实战 category:

  • 微信公众号 head:

对于一些用户请求,在某些情况下是可能重复发送的,如果是查询类操作并无大碍,但其中有些是涉及写入操作的,一旦重复了,可能会导致很严重的后果,例如交易的接口如果重复请求可能会重复下单。

重复的场景有可能是:

  1. 黑客拦截了请求,重放
  2. 前端/客户端因为某些原因请求重复发送了,或者用户在很短的时间内重复点击了
  3. 网关重发
  4. ….

本文讨论的是如何在服务端优雅地统一处理这种情况,如何禁止用户重复点击等客户端操作不在本文的讨论范畴。

利用唯一请求编号去重

可能会想到的是,只要请求有唯一的请求编号,那么就能借用Redis做这个去重——只要这个唯一请求编号在redis存在,证明处理过,那么就认为是重复的

代码大概如下:

String KEY = "REQ12343456788";//请求唯一编号
  • 所属分类: 后端技术
  • 本文标签: Java
  • 版权声明: 本文链接 https://seaxiang.com/blog/c69916628aca45e2a39c45b4695dab96