欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java 使用redis 判断同一个手机号一小时内发送短讯是否超过5次

程序员文章站 2022-05-14 21:27:35
...
/**
 * 同一个手机号一小时内发送短讯是否超过5次
 * @author yanling.hua
 * @date 2018/8/6 13:37
 */
public Boolean sendCount(String mobile, Short msgType) {
    String key=mobile;
    if(msgType==1){//注册短信
        key = key+"reg";
    }else if(msgType==2){
        key = key+"find";//找回密码短信
    }
    Boolean boo=true;
    long size = redisTemplate.opsForList().size(key);
    if (size <= 5) {
        redisTemplate.opsForList().rightPush(key,System.currentTimeMillis() + "");
    } else {
        List<String> t = redisTemplate.opsForList().range(key, 0, (int) size);
        Long now = System.currentTimeMillis();
        if (now - Long.valueOf(t.get(0)) > 1*60*60*1000) {//最开始的一条距现在超过一小时就移除左边的,并添加一条
            redisTemplate.opsForList().leftPop(key);
            redisTemplate.opsForList().rightPush(key,System.currentTimeMillis() + "");
        } else {//最左的一条也在一小时内,不能发送短信
            boo=false;
        }
    }
    return boo;
}