Redis限制每人每日点击查看次数,发送短信到上级

需求:

限制每人每天只能点击30次按钮,当点击到达30次限度之后进行提示,并向上级发送短信

思路: redis ---》当用户点击之后,在redis中创建一个hash,将用户id和点击次数存入到redis中,用户每次点击之后,对用户点击次数进行判断 ,并对用户的点击次数进行累加。如果点击次数大于限制次数之后,在前端进行消息提示。当点击次数等于限制次数,发送消息到指定的手机上。定时清空redis的数据。

1.当点击按钮之后,在redis中为当前用户创建键值。

//当用户点击之后,先判断当前redis中有没有该用户的数据,如果没有,将该用户id设为键,0设为值表示点击次数。

  if (!redisTemplate.opsForHash().hasKey("clickCount", String.valueOf(hluser.getId()))) {redisTemplate.opsForHash().put("clickCount", String.valueOf(hluser.getId()),"0");}
//每次点击之后,将当前用户的点击次数获取下来,对次数进行加1操作
 String clickCount = (String)redisTemplate.opsForHash().get("clickCount", String.valueOf(hluser.getId()));
                    Integer count =Integer.valueOf(clickCount);
                    ++count;
                  //限制点击次数为30次
                    if(count == 30) {
                        a.setSign(2);
                       //追加点击次数到达限制次数的日志
                        redisTemplate.opsForHash().put("clickCount", String.valueOf(hluser.getId()),String.valueOf(count));
                        String note = hluser.getUserName() + "点击显示联系方式图标已达"+count+"次";
                        logService.add("客户管理", "点击显示联系方式", note);
                        logService.add("客户管理","联系方式的显示",detail);
                        customersResponseData.setMas("请求成功");
                       
                        //到达次数之后进行短信发送
                        List<String> sendTelephone = new ArrayList<>();
                        //追加接收人的电话信息
                        sendTelephone.add("11111111111");
                        sendTelephone.add("11111111111");
                        //发送短信 :sendSms(用户名,电话列表)
                        msgService.sendSms(hluser.getUserName(), sendTelephone);
                    //没有达到限制次数的情况
                    }else if(count < 30){
                        a.setSign(2);
                        redisTemplate.opsForHash().put("clickCount", String.valueOf(hluser.getId()),String.valueOf(count));
                        logService.add("客户管理","联系方式的显示",detail);
                        customersResponseData.setMas("请求成功");
                    }else{
                    //达到限制次数的情况
                        redisTemplate.opsForHash().put("clickCount", String.valueOf(hluser.getId()),String.valueOf(count));
                        a.setSign(1);
                        a.setTelephone(encryptTelephone(a.getTelephone()));
                        customersResponseData.setMas("您今天的点击次数已达上限");
                    }

2.进行短信发送

/**
 * 当客户管理点击30次之后发送短信
 * */
@Override
public void sendSms(String name, List<String> sendTelephone){
    CommonResponse response = null;
    DefaultProfile profile = DefaultProfile.getProfile("", "", "");
    IAcsClient client = new DefaultAcsClient(profile);
    CommonRequest request = new CommonRequest();
    request.setSysMethod(MethodType.POST);
    request.setSysDomain("dysmsapi.aliyuncs.com");
    request.setSysVersion("");
    request.setSysAction("SendSms");
    request.putQueryParameter("RegionId", "cn-hangzhou");
    request.putQueryParameter("SignName", "");
    request.putQueryParameter("TemplateCode", "");
    for (String telephone : sendTelephone) {
        request.putQueryParameter("PhoneNumbers", telephone);
        JSONObject param = new JSONObject();
        param.put("name",name);
        request.putQueryParameter("TemplateParam", param.toString());
        try {
        // 客户端发送短信
        response = client.getCommonResponse(request);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

3.定时清除redis中当天点击次数:

    /**
     * 每天凌晨12点的点击次数进行清除,将所有的数据都修改为0
     */
    @Scheduled(cron = "0 0 0 * * *")
    //每分钟对数据进行一次清空操作
//    @Scheduled(cron = "0 */1 * * * ?")
    public void clearClickCount() {
        //获取redis中当天进行点击的用户id
        Map<Object, Object> clickCount =      redisTemplate.opsForHash().entries("clickCount");
        for (Object id : clickCount.keySet()) {
            //通过id删除当天点击的次数
            redisTemplate.opsForHash().delete("clickCount", (String)id);
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值