Redis實現訪問流量控制

爲什麼需要訪問流量控制

對於成熟的系統,一般會提供一些自我保護能力。其中比較重要的就是流量控制能力,一旦大促期間出現突發的流量高峯,系統頂不住的時候,如果沒有類似的保護系統,整個系統就可能掛掉。

因爲在運行的系統有緩存,掛掉的系統可能一時間緩存跟不上,或者剛啓動起來的時候還沒有緩存(恢復系統過程中,已有緩存已經過期失效),那麼很可能系統起來就會掛掉,從而要經過很長時間才能恢復使用,這個恢復過程消耗一個小時、兩個小時可能都是比較好的。

一般,在突發高流量場景下,無論如何都不可能短時間的獲得特別高的服務能力。所以,不論是系統將近崩潰之前,還是系統崩潰之後需要重新啓動的時候,都需要一個流量控制系統來讓系統能夠服務,或者能夠恢復服務。原則是,“只要系統不死,就有東山再起的希望”。

首先,需要說明對於流量控制可以是在接入層入做,比如硬件的F5、軟件的Nginx、Apache Httpd。

這裏講述,如果使用redis做訪問流量控制,可以怎麼做。這裏所說的流量控制是限制一定時間內的請求次數,可以是限制IP級別,也可以是限制用戶Id級別。

方法

藉助redis的key過期機制,生成有效期1分鐘的key。當key存在時,計數加1,當key不存在時,創建key,同時設置過期時間。

代碼如下:

public static bool canPass(limitKey string){
	Long value = redisTemplate.opsForValue().increment(limitKey);
	if(value == 1L) {
		redisTemplate.opsForValue().set(limitKey, 1L, 60L, TimeUnit.SECONDS);
	}
	if (value > limit) {
		return false
	}
	return true;
}
發佈了141 篇原創文章 · 獲贊 140 · 訪問量 68萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章