需求
- 一定时间内(例如一分钟内)禁止重复发送邮件
方式
前端增加校验倒计时, 不到60秒按钮不给点击
- 实现简单
- 不安全, 存在绕过的情况
增加 Redis 存储, 发送的时候设置下额外的 key, 并且 60 秒后过期
- 非原子操作, 存在不一致性
- 增加的额外的 key-value 存储, 浪费空间
流程
前置: 判断是否重复发送
1. 存储验证码到缓存
2. 发送邮箱验证码
后置: 存储发送记录
基于原先的 key 瓶装时间戳
- 好处: 满除了当前节点的原子性,也满足业务需求