判断一个小时之内是否重复发送了10次短信

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介:

判断一个小时之内是否重复发送了10次短信

并且是同一个手机

每次发送短信,要写入当前时间戳到redis:

Java代码   收藏代码
  1. String mobile="13718486139";  
  2.         String time=String.valueOf(DateTimeUtil.getCurrentMillisecond());  
  3.         RedisHelper.getInstance().saveKeyCache("limit_one_hour", mobile+"_"+time, time);  

 

检查时先获取所有时间戳:

Java代码   收藏代码
  1. Map map=RedisHelper.getInstance().getAllKeyCache("limit_one_hour");  

 

具体判断逻辑:

Java代码   收藏代码
  1. @Test  
  2.     public void test_limitOneHour2(){  
  3.         String mobile="13718486139";  
  4.         int limitCount=5;  
  5.         int limitTime=2*60;//两分钟  
  6.         Map<String,String> map=new HashMap<String,String>();  
  7.         map.put("13718486139_1445429819328""1445431479437");  
  8.         map.put("13718486139_1445429874699""1445431485996");  
  9.         map.put("13718486139_1445429874799""1445431491527");  
  10.         map.put("13718486139_1445430757886""1445431496853");  
  11.           
  12.         System.out.println(map);  
  13.         List<Long>list=new ArrayList<Long>();  
  14.         for(String key:map.keySet()){  
  15.             if(key.startsWith(mobile)){  
  16.                 list.add(Long.parseLong(map.get(key))/1000);  
  17.             }  
  18.         }  
  19.         SortList<Long>sortUtil=new SortList<Long>();  
  20.         sortUtil.Sort(list, "longValue""desc");  
  21.         int length=list.size();  
  22.         int toIndex=0;//要截取的最大序号  
  23.         if(limitCount>length){  
  24.             toIndex=length;  
  25.         }else{  
  26.             toIndex=limitCount;  
  27.         }  
  28.         List<Long>result=list.subList(0, toIndex);  
  29.         long delter=list.get(0).longValue()-list.get(toIndex-1).longValue();  
  30.         long delterSecond=delter;  
  31.         System.out.println(delterSecond);  
  32.         if(delterSecond<limitTime){  
  33.             System.out.println("超限");  
  34.         }else{  
  35.             System.out.println("可以继续发短信");  
  36.         }  
  37.         System.out.println(result);  
  38.     }  
  39.       

 步骤:

(1)把当前手机号的所有时间戳放入list中;

(2)对list排序,按时间顺序,从大到小;(时间越大,表示离现在越近)

(3)根据次数(limitCount)限制 来截取list;

(4)计算list中第一个元素和最后一个元素的差量,即limitCount条短信的时间跨度delter

(5)若delter 小于时间限制limitTime,则表示超过限制,那么禁止发送短信

 

 

问题

为什么要以这种方式存储到redis?

 "limit_one_hour" "13718486139_1445429819328" "1445431496853"

而不是直接以手机号为key

13718486139  "1445431496853"  ""

 

因为:可能其他redis项是以手机号为key的,这样就会覆盖掉.即这样做有风险.

 

不过如下方式可以:

13718486139_limit_one_hour   "1445431496853"  ""

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
9月前
|
Windows
连续时间系统的冲激响应和零状态响应
连续时间系统的冲激响应和零状态响应
158 0
淘宝批量复制宝贝提示“当前类目大于48小时发货的发货时间不能大于15天,请调整”怎么解决?
要复制这个宝贝上传到淘宝店铺,只需要重新复制一次,然后在大淘营淘宝宝贝复制专家下载配置的第二步,选择一个小于或等于15天的发货时间(见下图),这样就可以复制宝贝上传到淘宝店铺了。
|
10月前
打印中间流水码(前后固定,中间变动)
有一些用户的标签需求是流水数据前后加上其他固定字符,形成中间流水,如:A0001B、A0002B、A0003B...,这样的流水数据利用恒佑的条码打印软件可以轻松实现。
66 0
时间大小判断
大家可以根据自己的理解去使用 before 是在什么之前 after 是在什么之后 true 对 false 错
47 0
时间大小判断
|
机器人 PHP
如何第一时间收到接口报错?
不管哪个语言做服务端开发,一定有异常处理和日志。 找到一个三方平台,当捕获到异常或者有新的打印日志时回调,推送错误日志给我们。 经过一番调研之后,发现钉钉的机器人是个好工作
如何第一时间收到接口报错?
复制宝贝提示“您填写的保质期截止当前已经小于10天,不允许发布”,如何解决?
以前大淘营就有写过这个问题的文章,之前大淘营给出的解决方案是:在淘宝网上找到相同且日期符合要求的宝贝,然后复制上传到店铺。 现在,大淘营淘宝宝贝复制专家已经升级,增加了一些以前没有的功能,除了找相同的宝贝来复制上传以外,还可以通过以下方式解决: 1、在大淘营淘宝宝贝复制专家下载配置的第二步,勾选“替换属性”,将原宝贝的生产日期替换为淘宝要求内的日期即可。
|
编解码 容器
微信如何发送超过大于25M的视频文件
首先我们需要了解一下微信的传输机制,文件不能超过100M,视频不能超过25M,一旦文件和视频超过限制大小,我们就很难发送相关的文件资料。
微信如何发送超过大于25M的视频文件
服务端如何防止重复支付
服务端如何防止重复支付
157 0
服务端如何防止重复支付
|
缓存 负载均衡 网络协议

热门文章

最新文章