实现思路:
主要是依赖于分布式缓存中间件redis的setNxEx 会设置一个过期时间
场景说明:
用户有时候会由于手抖、恶意、或者硬件设备本身的问题,在极短的时间间隔内重复点击一个按钮多次,即重复向同一个接口发送完全相同的请求多次。为了避免这种情况给服务端处理请求带来意外,需要防重点处理。
防重点有时会做在前端,有时做在后端。但为了避免前后端的相互依赖,建议两个端都做会好一些。
这里提供一个企业级服务端做防重点的思路(已在实际商用中)
图示:
前置知识:
概念:
setnx是「SET if Not eXists」的缩写,只有不存在的时候才设置,可以利用它来实现锁的效果。
SETNX key value
若给定的 key 已经存在,则 SETNX 不做任何动作。
SET命令:
SET命令可用选项的基本语法
SET KEY VALUE [EX seconds] [PX milliseconds] [NX|XX]
EX
到期时间(以秒为单位)
PX
到期时间(以毫秒为单位)
NX
仅在键不存在时设置键
XX
只有在键已存在时才设