高并发引起的重复写入

db 的唯一性约束适合场景较少

  • 由于网络抖动,发送多次请求
  • 需要前后端一起配合

前端

  • 发送一些限制操作的请求后,禁用按钮
    • 比如注册手机号等
  • 但是无法避免恶意 http 请求

后端

标志位缓存计数方案

  • 接收一些限制操作的请求时,进行标志位缓存计数
    • key_id+operation_id: value + expire
    • redis 的 zset 可以处理
  • 但是无法处理 expire 时间外的重复写入

token 方案

  • 一旦渲染完成表单,立刻发起一次 token 请求,前后端保存该 token
    • token 请求如何隐藏呢
  • 表单提交,进行加锁验证环节
    • 后端在加锁代码中,进行 token 校验,一旦通过,则后端删除 token
    • 进行后续操作
  • 重复提交,后端无 token,返回失败