好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > redis限流的實(shí)際應(yīng)用

redis限流的實(shí)際應(yīng)用

熱門標(biāo)簽:宿遷便宜外呼系統(tǒng)平臺 山東外呼銷售系統(tǒng)招商 超呼電話機(jī)器人 貴州電銷卡外呼系統(tǒng) 日本中國地圖標(biāo)注 魔獸2青云地圖標(biāo)注 鄭州人工智能電銷機(jī)器人系統(tǒng) 北京400電話辦理收費(fèi)標(biāo)準(zhǔn) 十堰營銷電銷機(jī)器人哪家便宜

為什么要做限流

首先讓我們先看一看系統(tǒng)架構(gòu)設(shè)計(jì)中,為什么要做“限流”。

旅游景點(diǎn)通常都會有最大的接待量,不可能無限制的放游客進(jìn)入,比如故宮每天只賣八萬張票,超過八萬的游客,無法買票進(jìn)入,因?yàn)槿绻^八萬人,景點(diǎn)的工作人員可能就忙不過來,過于擁擠的景點(diǎn)也會影響游客的體驗(yàn)和心情,并且還會有安全隱患;「只賣N張票,這就是一種限流的手段」。

軟件架構(gòu)中的服務(wù)限流也是類似,也是當(dāng)系統(tǒng)資源不夠的時候,已經(jīng)不足以應(yīng)對大量的請求,為了保證服務(wù)還能夠正常運(yùn)行,那么按照規(guī)則,「系統(tǒng)會把多余的請求直接拒絕掉,以達(dá)到限流的效果」;

不知道大家注意過沒有,比如雙11,剛過12點(diǎn)有些顧客的網(wǎng)頁或APP會顯示下單失敗的提示,有些就是被限流掉了。

常見的限流算法

計(jì)數(shù)法

顧名思義就是來一個,記錄一個,比如我1分鐘只能處理1000個請求,那么我們就可以設(shè)置一個計(jì)數(shù)器,來一個請求就incr+1,當(dāng)1分鐘之內(nèi)的數(shù)量大于等于1000之后不處理了即可,偽代碼如下

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$rate_limit = 1000;  //限制個數(shù)
$rate_seconds = 60;  //限制時間
$redis_key = "redis_limit";
$count = $redis->get($redis_key);
if ($count >= $rate_limit){  //判斷60秒內(nèi)請求個數(shù)是否已經(jīng)達(dá)到上限
    //直接返回,不處理請求
    return
}
$redis->incr($redis_key, 1);//請求計(jì)數(shù)
$redis->expire($redis, $rate_seconds); //設(shè)置過期時間 60s
//to do  業(yè)務(wù)邏輯處理.......

這種計(jì)數(shù)方式比較簡單快捷,但是有很大的缺點(diǎn),因?yàn)檎埱蟮脑L問不一定是很平穩(wěn)的,如果0:59過來了1000個請求,1:01已經(jīng)是下一個窗口,又過來了1000個請求,但實(shí)際上三秒內(nèi)來了2000個請求,已經(jīng)超過我們的限流上限了。所以這種方法是不推薦的。

滑動窗口算法

還拿上面的例子,一分鐘分6份,每份10秒;每過10秒鐘,我們的時間窗口就會往右滑動一格,每個格子都有獨(dú)立的計(jì)數(shù)器,我們每次都計(jì)算時間窗口內(nèi)的數(shù)量,可以解決計(jì)數(shù)器法中的問題,而且當(dāng)滑動窗口的格子越多,那么限流的統(tǒng)計(jì)就會越精確。具體可以參考下圖,看圖比較清晰

偽代碼實(shí)現(xiàn)如下

function api_limit($scene,  $period, $maxCount){
    $redis = new Redis();
    $redis->connect('127.0.0.1', 6379);
    $key = sprintf('hist:%s', $scene); //限流場景唯一標(biāo)識
    $now = msectime();   // 毫秒時間戳,這樣更精確
    $pipe=$redis->multi(Redis::PIPELINE); //使用管道提升性能
    $pipe->zadd($key, $now, $now); //value 和 score 都使用毫秒時間戳
    $pipe->zremrangebyscore($key, 0, $now - $period); //移除時間窗口之前的行為記錄,剩下的都是時間窗口內(nèi)的
    $pipe->zcard($key);  //獲取窗口內(nèi)的行為數(shù)量
    $pipe->expire($key, $period/1000 + 1);  //多加一秒過期時間
    $replies = $pipe->exec();
    return $replies[2] = $maxCount;  //$replies[2]為zcard返回的個數(shù)  如果zcard結(jié)果大于maxCount,則不處理結(jié)果
}

for ($i=0; $i20; $i++){  //測試限流是否實(shí)現(xiàn)代碼
    var_dump(isActionAllowed("uniq_scene", 60*1000, 5)); //執(zhí)行可以發(fā)現(xiàn)只有前5次是通過的
}

//返回當(dāng)前的毫秒時間戳
function msectime() {
    list($msec, $sec) = explode(' ', microtime());
    $msectime = (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
    return $msectime;
 }

這段代碼還是略顯復(fù)雜,需要讀者花一定的時間好好啃。它的整體思路就是:每一個行為到來時,都維護(hù)一次時間窗口。將時間窗口外的記錄全部清理掉,只保留窗口內(nèi)的記錄。

因?yàn)檫@幾個連續(xù)的 Redis 操作都是針對同一個 key 的,使用 pipeline 可以顯著提升Redis 存取效率。「但這種方案也有缺點(diǎn),因?yàn)樗涗洉r間窗口內(nèi)所有的行為記錄,如果這個量很大,比如限定 60s 內(nèi)操作不得超過 100w 次這樣的參數(shù),它是不適合做這樣的限流的,因?yàn)闀拇罅康拇鎯臻g」。

后面還有漏桶算法和令牌桶算法,由于各自的實(shí)現(xiàn)比較復(fù)雜,所以準(zhǔn)備各自新開一篇文章單獨(dú)描述

到此這篇關(guān)于redis限流的實(shí)際應(yīng)用的文章就介紹到這了,更多相關(guān)redis限流內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 基于Redis的限流器的實(shí)現(xiàn)(示例講解)
  • 詳解Redis實(shí)現(xiàn)限流的三種方式
  • 基于Redis實(shí)現(xiàn)分布式應(yīng)用限流的方法
  • redis redisson 限流器的實(shí)例(RRateLimiter)

標(biāo)簽:北京 臺州 朝陽 果洛 吉安 楊凌 大慶 江蘇

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《redis限流的實(shí)際應(yīng)用》,本文關(guān)鍵詞  redis,限,流的,實(shí)際,應(yīng)用,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《redis限流的實(shí)際應(yīng)用》相關(guān)的同類信息!
  • 本頁收集關(guān)于redis限流的實(shí)際應(yīng)用的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 他狠狠撞击她她哭着求饶| 啪影院a爽大片| 国语对白老女人8av| 用我的手指来搅乱吧| ??黄??色??视??频舞蹈| 桃花色网| 国产久一视频在线观看app| 美女被?到高潮喷出白浆www| 俄罗斯a一级毛片免费观看| 欧美特一级片| 姐妹秘密换夫| 男男做肉视频| 寡妇做爰特级A片免费看| 欧美精品k频道在线播放| 色噜噜狠狠先锋影音久久| 日韩精品在线看| 色夜夜摸狠狠摸日日碰小说| 日韩女同久久精品A片| 国产小视频福利| 欧美成人a级猛男视频片| 韩漫无羞遮无删减H漫画yy| 中文字幕乱码亚洲中文在线| lovesong完整版韩国综艺| 国产精品看片| 国产亲子伦XXXXX熟妇视频| 美女视频黄频大全视频在线播放| 久久入| 男人把女人桶爽| 中文字字幕码一二区| 95国产成人精品视频久爱成疾| 在免费JIZZJIZZ在线播放| 受后面含着攻入睡的漫画| 久久视精品| 国产福利午夜自产拍视频在线| 免费的特黄特色大片| 国产一级特黄AAA片奶水流 | 18freexxxxmovieshd1811800| 狠狠色丁香婷婷久久综合麻豆| 99re8这里只有精品国产AV| 美女国产在线观看| 男人添女人荫道口图片|