高并发引起的重复写入
db 的唯一性约束适合场景较少
- 由于网络抖动,发送多次请求
- 需要前后端一起配合
前端
- 发送一些限制操作的请求后,禁用按钮
- 比如注册手机号等
- 但是无法避免恶意 http 请求
后端
标志位缓存计数方案
- 接收一些限制操作的请求时,进行标志位缓存计数
key_id+operation_id: value
+ expire- redis 的 zset 可以处理
- 但是无法处理 expire 时间外的重复写入
token 方案
- 一旦渲染完成表单,立刻发起一次 token 请求,前后端保存该 token
- token 请求如何隐藏呢
- 表单提交,进行加锁验证环节
- 后端在加锁代码中,进行 token 校验,一旦通过,则后端删除 token
- 进行后续操作
- 重复提交,后端无 token,返回失败