系统中有发送短信功能,如何编写一个1分钟内只能发3次短信的限制,如何实现?

提问者:Rae 问题分类:面试刷题
系统中有发送短信功能,如何编写一个1分钟内只能发3次短信的限制,如何实现?
1 个回答
待我幼稚完
待我幼稚完
使用redis的zset实现即可,示例步骤如下:
private static Boolean canSendSms(String phone,Jedis jedis) {
        //现在的时间
        long now = System.currentTimeMillis();
        // 设置key以用的id或者phone为例
        String key = "phone:" + phone + ":sms";
        //把超过1分钟的所有数据给删除屌
        jedis.zremrangeByScore(key, 0, now - 60000);
        //统计剩余的数据(即1分钟内的数据)
        long zcount = jedis.zcount(key, now - 60000, now);
        //小于3次可以直接发
        if(zcount < 3){
            //把当前时间戳添加进去
            jedis.zadd(key, now, String.valueOf(now));
            //允许发短信
            return true;
        }elese
        {
            //不允许发短信
            return false;
        }
    }
发布于:3个月前 (01-20) IP属地:四川省
我来回答