一、規則限制
一天內最多發送25條,1小時內最多發送5條
二、實現思路
1、將手機號作爲鍵
2、將每一次發送短信的時間戳依次存進該鍵的值中
3、取出鍵中的值並遍歷,查詢每個值是否在一天內和一小時內的區間裏
三、代碼實現
//獲取當前小時內開始的時間戳
$start_hour = strtotime(date("Y-m-d H:00:00"));
//獲取當前小時內結束的時間戳
$end_hour = date(("Y-m-d H:59:59"));
//獲取今天開始的時間戳
$beginToday=mktime(0,0,0,date('m'),date('d'),date('Y'));
//獲取今天結束的時間戳
$endToday=mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1;
$redis = new \Redis();
$redis->connect('127.0.0.1', 6379);
//判斷該鍵是否存在
if($redis->exists($mobile)){
//獲取該鍵的數組值
$arr = $redis->lrange($mobile, 0, -1);
if($arr){
$i=0;
$j=0;
foreach ($arr as $k => $v) {
//查詢一小時內發送短信的次數
if ($v>=$start_hour&&$v<=$end_hour) {
$i++;
}
//查詢一天內發送短信的次數
if($v>=$beginToday&&$v<=$endToday){
$j++;
}
}
//判斷一小時內的發送短信次數是否超過5次
if($i>5){
$json=array('status'=>1000,'msg'=>'發送短信頻繁,請稍後重試');
exit(json_encode($json));
}
//判斷一天內的短信發送次數是否超過25次
if($j>25){
$json=array('status'=>1000,'msg'=>'發送短信頻繁,請稍後重試');
exit(json_encode($json));
}
//將本次發送時間存入
$redis->rpush($mobile,time());
}
}else{
//如果不存在 則把當前時間內存入時間戳,並繼續向下執行,發送短信
$redis->rpush($mobile, time());
}