`

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

    博客分类:
  • Java
阅读更多

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

并且是同一个手机

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

String mobile="13718486139";
		String time=String.valueOf(DateTimeUtil.getCurrentMillisecond());
		RedisHelper.getInstance().saveKeyCache("limit_one_hour", mobile+"_"+time, time);

 

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

Map map=RedisHelper.getInstance().getAllKeyCache("limit_one_hour");

 

具体判断逻辑:

@Test
	public void test_limitOneHour2(){
		String mobile="13718486139";
		int limitCount=5;
		int limitTime=2*60;//两分钟
		Map<String,String> map=new HashMap<String,String>();
		map.put("13718486139_1445429819328", "1445431479437");
		map.put("13718486139_1445429874699", "1445431485996");
		map.put("13718486139_1445429874799", "1445431491527");
		map.put("13718486139_1445430757886", "1445431496853");
		
		System.out.println(map);
		List<Long>list=new ArrayList<Long>();
		for(String key:map.keySet()){
			if(key.startsWith(mobile)){
				list.add(Long.parseLong(map.get(key))/1000);
			}
		}
		SortList<Long>sortUtil=new SortList<Long>();
		sortUtil.Sort(list, "longValue", "desc");
		int length=list.size();
		int toIndex=0;//要截取的最大序号
		if(limitCount>length){
			toIndex=length;
		}else{
			toIndex=limitCount;
		}
		List<Long>result=list.subList(0, toIndex);
		long delter=list.get(0).longValue()-list.get(toIndex-1).longValue();
		long delterSecond=delter;
		System.out.println(delterSecond);
		if(delterSecond<limitTime){
			System.out.println("超限");
		}else{
			System.out.println("可以继续发短信");
		}
		System.out.println(result);
	}
	

 步骤:

(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"  ""

分享到:
评论

相关推荐

    ZOGLAB短信控件包更新_090901

    2.3 发送短信,原型如下: long SMSSendMessage([in] String strContent, [in] String strDestNum) 参数,strContent:信息内容; strDestNum:目标号码; 返回值 0: 表示发送失败,具体失败原因参见 [ 3.1 发送...

    jQuery实现倒计时重新发送短信验证码功能示例

    例如,为了防止用户在短时间内重复发送验证码短信,从而给短信服务商造成不必要的负担,或者避免恶意使用接口,通常会设置一个限制时间。在这个时间范围内,用户是不能再次发送验证码请求的,这样既保护了用户的利益...

    java开源包4

    jaev 是一个用来验证电子邮箱地址是否有效的 Java 项目。 Java的FastCGI网关 jFastCGI jFastCGI 是一个可以让Tomcat 之类的Servlet容器支持运行PHP和其它fastcgi应用程序,将Servlet容器充当成一个FastCGI 的网关。...

    mstar mmi 解答

    判断一个应用程序是否处于前台运行状态(即top app)通常涉及到获取当前应用程序堆栈的信息。这可能包括查询系统状态、使用特定的API来获取应用程序信息以及解析堆栈数据。 ### 如何增加新的快捷键? 增加新的...

    中通网通信试题大全[网络优化试题之是非题].pdf

    - **解释**: 1Erl是一个话务量单位,表示一个信道一小时内被完全占用的情况。每个用户在同一时间内只能占用一个信道,因此一个用户的最大话务量是1Erl。 #### 4. 邻频干扰保护比 - **知识点**: GSM规范中规定的邻频...

    vc++ 应用源码包_6

    压缩包内有两个源码包,一个是注册机源程序,另一个是解密机的源程序,一套完整的参考实例。 VC+MapX源码含GPS跟踪演示 VC3D 利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自...

    vc++ 应用源码包_1

    压缩包内有两个源码包,一个是注册机源程序,另一个是解密机的源程序,一套完整的参考实例。 VC+MapX源码含GPS跟踪演示 VC3D 利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自...

    vc++ 应用源码包_5

    压缩包内有两个源码包,一个是注册机源程序,另一个是解密机的源程序,一套完整的参考实例。 VC+MapX源码含GPS跟踪演示 VC3D 利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自...

    vc++ 应用源码包_2

    压缩包内有两个源码包,一个是注册机源程序,另一个是解密机的源程序,一套完整的参考实例。 VC+MapX源码含GPS跟踪演示 VC3D 利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自...

    vc++ 应用源码包_3

    压缩包内有两个源码包,一个是注册机源程序,另一个是解密机的源程序,一套完整的参考实例。 VC+MapX源码含GPS跟踪演示 VC3D 利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自...

    vc++ 开发实例源码包

    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 FreeBird2011Dlg.h 主对话框类头文件 MultiGroup.h 多播组类头文件 UserLink.h 用户链表类头文件 ListenSocket.h 侦听接口...

    WINCC全局脚本手册

    虽然提供的部分内容难以直接解析出具体的案例,但基于全局脚本的功能特性,我们可以设想一个简单的应用场景——温度监控系统中的报警逻辑处理: 1. **需求分析**:当温度超过设定阈值时,触发报警,并发送短信通知...

    单片机C语言模块化编程

    在这种情况下,`PINT` 的含义变得模糊不清,难以判断是定义了两个`unsigned int`指针还是一个指针加一个整型变量。正确的方法应该是使用`typedef`来定义数据类型别名: ```c typedef unsigned int* PINT; // 正确...

    南安2016年事业编招聘考试真题及答案解析版.docx

    相比之下,选项C更符合题干中的描述,即制度的变迁是一个渐进的过程。因此,正确答案是C。 ### 题目10:主旨大意 **题干**:幸运的机会就像银河中的星星一样,虽然每颗星星单独看不太起眼,但作为一个整体却璀璨...

    网趣网上购物系统时尚版V13.0

    应用户强烈要求,时尚版具有商品批量添加功能,可自定义一次性添加的商品个数,可一次提交保存所有商品信息,抛弃单调、重复的工作,网趣时尚版新版脱颖而出,让您的管理工作更轻松,管理更方便! 十、订单自动...

    网络验证 网络验证防破解的一些思路

    例如,如果发现某个IP地址在短时间内发送了大量的重复请求,则可能是自动化攻击。 5. **文件完整性校验** - 对系统中的关键文件进行定期的MD5校验,以检测文件是否被篡改。这种做法可以及时发现潜在的安全威胁,...

    网趣网上购物系统的部分特点与精华

    应用户强烈要求,时尚版具有商品批量添加功能,可自定义一次性添加的商品个数,可一次提交保存所有商品信息,抛弃单调、重复的工作,网趣时尚版新版脱颖而出,让您的管理工作更轻松,管理更方便! 十、订单自动...

    网趣网上购物系统时尚版 V9.0

    根据商城的设计原则,对于同一商品如果多次点购买分按一个商品购买多次计算,但用户选择的同一个商品,如果选择了不同颜色或尺码,这个问题就出现了,时尚版现已解决这个问题,同一商品选择不同颜色或尺码进行多次...

    网趣网上购物系统时尚版

    应用户强烈要求,时尚版具有商品批量添加功能,可自定义一次性添加的商品个数,可一次提交保存所有商品信息,抛弃单调、重复的工作,网趣时尚版新版脱颖而出,让您的管理工作更轻松,管理更方便! 十、订单自动...

Global site tag (gtag.js) - Google Analytics