一小时内限制发送次数实现

某项目中需要实现限制用户1小时内对同一手机号最多发送3条短信。需要注意的是,用户可以设置任意时刻发送给某一手机短信,这个限制条件只限制发送方,而一个手机号码在1小时内收到的短信数无限制。

        本算法程序最终实现的效果是到达发送设定时间时,如果1小时内给发送手机号已经发送过3次,则弹窗提示用户这个提示。

        这个问题的核心是“一小时”的理解。它和论坛的XX时间内最多只能搜索XX次类似,参考大多数类似问题的解决方法,本算法程序是这样处理“一小时”的:如果限制为1小时内最多3条,假设发送给手机号A一条短信,距离第一条短信发送1小时内可以继续发送第2、3条短信,但第4条短信必须在1小时之后才发送。

        本算法思路是:

        1)新建本地数据库表SMS_LIMIT,包含三个属性:接收手机号phone_number、已发送短信数sms_send_num、限时开始时间last_send_time;

        2)开发一个发送任务,如果表中不存在接收手机号则插入并初始化,继续等待任务执行步骤2;如果存在则执行步骤3;

        3)查询该接收手机号的sms_send_num是否已经超过限制,如果没有超过限制则sms_send_num加1,执行发送,继续等待任务执行步骤2。如果超过限制则查询该接收手机号的last_send_time是否已经过去1小时,如果否则提示用户,不执行发送,继续等待任务执行步骤2;如果是则sms_send_num清零,last_send_time更新为现在的时间,继续等待任务执行步骤2。算法完毕。


        代码见 Github

点赞