<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
主要針對目前線上簡訊被指令碼惡意盜刷的情況,用Redis實現滑動視窗限流
public void checkCurrentWindowValue(String telNum) { String windowKey = CommonConstant.getNnSmsWindowKey(telNum); //獲取當前時間戳 long currentTime = System.currentTimeMillis(); //1小時,預設只能發5次,引數smsWindowMax做成可設定項,設定到Nacos設定中心,可以動態調整 if (RedisUtil.hasKey(windowKey)) { //引數smsWindowTime表示限制的視窗時間 //這裡獲取當前時間與限制視窗時間之間的簡訊傳送次數 Optional<Long> optional = Optional.ofNullable(RedisUtil.zCount(windowKey, currentTime - smsWindowTime, currentTime)); if (optional.isPresent()) { long count = optional.get(); if (count >= smsWindowMax) { log.error("==========>當前號碼:{} 簡訊傳送太頻繁,{}", telNum, count); throw new ServiceException(MidRetCode.umid_10060); } } } StringBuilder sb =new StringBuilder(); String windowEle = sb.append(telNum).append(":").append(currentTime).toString(); //新增當前傳送元素到zSet中(由於保證元素唯一,這裡將元素加上了當前時間戳) RedisUtil.zAdd(windowKey, windowEle, currentTime); //設定2倍視窗Key:windowKey 的過期時間 RedisUtil.expire(windowKey, smsWindowTime*2, TimeUnit.MILLISECONDS); }
補充:下面看下以php語言為例基於redis實現滑動視窗式的簡訊傳送介面限流
滑動視窗簡訊傳送限流演演算法
1.有兩條規則
基於IP的限制和基於手機號的限制
IP規則:
1分鐘限制5
10分鐘限制30
1小時限制50
手機號規則:
1分鐘限制1
10分鐘限制5
1小時限制10
2.滑動視窗就是隨著時間的流動 , 進行動態的刪減區間內的資料 , 限制時獲取區間內的資料
最主要的是用到了redis的zRemRangeByScore來進行刪除區間外的資料
<?php /*滑動視窗簡訊傳送限流演演算法 1.有兩條規則 基於IP的限制和基於手機號的限制 IP規則: 1分鐘限制5 10分鐘限制30 1小時限制50 手機號規則: 1分鐘限制1 10分鐘限制5 1小時限制10 */ //IP規則 $ipRules=array( 60=>5, 600=>30, 3600=>50 ); //手機號規則 $phoneRules=array( 60=>1, 600=>5, 3600=>10 ); $r = checkLimits($ipRules,$_SERVER["REMOTE_ADDR"],$_GET['tel']); var_dump($r); $r = checkLimits($phoneRules,$_GET['tel'],$_GET['tel']); var_dump($r); function checkLimits($rules,$key,$tel){ $redis = new Redis(); $redis->connect('115.159.28.111', 1991); foreach($rules as $ruleTime=>$rule) { $redisKey=$key."_".$ruleTime; $score=time(); $member=$tel.'_'.$score; $redis->multi(); $redis->zRemRangeByScore($redisKey, 0, $score - $ruleTime);//移除視窗以外的資料 $redis->zAdd($redisKey, $score, $member); $redis->expire($redisKey, $ruleTime); $redis->zRange($redisKey, 0, -1, true); $members = $redis->exec(); if (empty($members[3])) { break; } $nums=count($members[3]); var_dump($nums); if($nums>$rule){ return false; } } return true; }
到此這篇關於基於Redis zSet實現滑動視窗對簡訊進行防刷限流的文章就介紹到這了,更多相關Redis zSet滑動視窗限流內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45