1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
private
boolean
checkSendMobile2(String mobile){
int
limitCount =
0
;
Object obj = UserCacheManager.getValue(
"SEND_SMS_TYPE"
,
mobile);
String limitCountKey = mobile+
"_limitCount"
;
//每个手机号码就代表是一个用户
if
(UserCacheManager.getValue(
"SEND_SMS_LIMIT_COUNT"
, limitCountKey)==
null
){
limitCount =
1
;
// 记录第一次
}
else
{
limitCount = (
int
) UserCacheManager.getValue(
"SEND_SMS_LIMIT_COUNT"
, limitCountKey);
}
if
(obj
instanceof
Long) {
long
time = (Long) obj;
if
(System.currentTimeMillis() - time <
1
*
60
*
1000
){
//如果是在一分钟之内 则判断访问次数
limitCount++;
UserCacheManager.put(
"SEND_SMS_LIMIT_COUNT"
, limitCountKey, limitCount);
if
(limitCount>
3
){
//如果大于三次 则调用次数过多
return
true
;
}
else
{
return
false
;
}
}
else
{
//超过一分钟
limitCount =
1
;
//次数重新赋值1
//同时保存用户访问次数和时间
UserCacheManager.put(
"SEND_SMS_TYPE"
, mobile,
new
Date().getTime());
UserCacheManager.put(
"SEND_SMS_LIMIT_COUNT"
, limitCountKey, limitCount);
return
false
;
}
}
else
{
//没有保存用户访问时间, 则说明第一次访问
UserCacheManager.put(
"SEND_SMS_TYPE"
, mobile,
new
Date().getTime());
UserCacheManager.put(
"SEND_SMS_LIMIT_COUNT"
, limitCountKey, limitCount);
return
false
;
}
}
|
map<用户,List<时间(long)>>
比如你吧用户信息也传到这个方法里面去,map.get就能找到你最近访问的时间记录了,几点几分第一次,几点几分第二次,
还是按照时间先后顺序排列,都已经这样了。
for(List<时间(long)>){
if(list.get(i)-当前时间<三分钟){
++n;
}
}
if(n>3){
throw ;
}