Redis 如何實現限流功能?

2021-10-25 08:33:07 字數 726 閱讀 3497

「限流」這種事在生活中很常見,比如逢年過節時景點的限流,還有工作日的車輛單雙號限流等,有人可能會問為什麼要限流?我既然買了車子你還不讓我上路開?還有我倒景點買了門票,景點不是能賺更多的錢嗎?為什麼要限流呢?

其實限流的主要目的就是為了保證整個系統的正常執行,比如以車輛限流為了,它的作用主要有兩個,乙個是為了保證我們生存空間的資源少受汙染,尤其是近幾年霧霾已經越來越嚴重了,如果不採取相應的手段會導致生態系統更加惡化,第二,目前車輛的增長速度已經遠遠的超過了市政道路的新建速度,尤其是上班的時候大家都在趕時間,如果車流量太大的話就會造成嚴重的交通擁堵,那麼導致的直接後果就是大家上班都會遲到,為了解決這個問題所有需要限行。包括北上廣深從幾年前已經開始買車要搖號了,其實也是一種限流的手段,目的就是為了更好的保證我們整個系統的正常執行。

回到程式的這個層面也是一樣,假設我們的系統只能為 10 萬人同時提供購物服務,但是某一天因為老羅帶貨突然就湧進了 100 萬使用者,那麼導致的直接後果就是伺服器癱瘓,誰也甭想買東西了,所以這個時候我們需要「限流」的功能保證先讓一部分使用者享受購物的服務,而其他使用者進行排隊等待購物,這樣就可以讓整個系統正常的運轉了。

我們本文的面試題是,使用 redis 如何實現限流功能?

我們可以使用 redis 中的 zset(有序集合)加上滑動時間演算法來實現簡單的限流。所謂的滑動時間演算法指的是以當前時間為截止時間,往前取一定的時間,比如往前取 60s 的時間,在這 60s 之內執行最大的訪問數為 100,此時演算法的執行邏輯為,先清除 60s 之前的所有請

10 Redis實現限流功能

限流 這種事情即使在生活中也很常見,比如我們銀行辦理業務,銀行不可能給去的所有人同時服務,因為櫃檯就那麼幾個。所以可能一次只給5個人辦理業務,其他的人只能在後面排隊 再比如打飯等等,也是一樣的道理。因為能提供服務的數量有限,所以必須要通過限流的方式。這裡提一下微博,微博因為哪個明星出軌了,或者哪個明...

限流功能的實現

框架中限流功能的實現依賴於封裝好的限流類,設定方式上分為全域性設定和區域性設定 繼承類設定和自定義類設定。如果要實現限流功能則必須設定deafulrt throttle classes和deafulrt throttle rates 一 全域性設定的實現 1 settings.py 2 rest f...

Redis限流的幾種實現

目錄 當系統處理能力有限,如何組織計畫外的請求對系統施壓。首先我們先看下一些簡單的限流策略,防止暴力攻擊。比如要對ip訪問,沒5s只能訪問10次,超過進行攔截。如上圖,一般使用滑動視窗來統計區間時間內的訪問次數。使用 zset 記錄 ip 訪問次數,每個 ip 通過 key 儲存下來,score 儲...