在心理测评的线上实战场景中,校园机房的网络环境有时并不稳定。当学生耗费大量时间填完一份数百题的人格量表,点击“提交答卷”后,如果遇到局域网拥堵,浏览器可能迟迟无法收到后端的成功响应。出于焦虑,学生往往会连续多次点击提交按钮。
如果后端没有防重设计,重复请求可能生成多份答卷记录,干扰后续结果核对和任务统计。前端按钮防抖只能减少重复点击,关键约束仍需在服务端完成。
幂等性关注重复请求产生的业务效果:对同一提交标识重试,不应重复创建答卷。它不要求服务器只执行一次代码,也不等于对所有重试都返回错误。
下面是一种通用设计思路,并非对橙星云当前技术实现的说明:为一次逻辑提交设置稳定的幂等键,并管理处理状态和结果。
客户端重试同一次提交时沿用同一个键,服务端校验它对应的用户、任务和请求内容。键的有效期需要覆盖实际重试窗口,并明确超时后的查询与恢复方式。
Redis 原子操作可以帮助协调并发请求,但单纯查验后删掉令牌还不够:若业务随后失败,用户仍需要安全重试。应设计处理中、成功、失败等状态,并在业务提交与状态记录之间处理一致性。
数据库唯一约束可作为重复落库的防线。唯一键要符合业务允许的提交次数;若支持重测或不同轮次,应把对应轮次或提交标识纳入设计。
遇到重复键冲突时,应用可查询已有提交及其状态,向客户端返回可理解的处理结果。还要测试超时、进程中断和数据库失败,确认重试不会重复交卷,也不会把未成功的交卷永久拦住。
