php使用redis來實現限流和併發控制

2021-09-24 09:58:15 字數 463 閱讀 5981

在一些瞬時可能會有大量併發請求同時到達伺服器的場景下,比如搶購、限時活動等等,如果不對併發量進行控制,瞬時的高併發可能會導致系統崩潰,這時我們就需要把一部分請求擋掉,可以結合redis來實現乙個基本的限流功能。

function makeorder(\redis $redis, $concurrencykey) 

} else

// 處理業務邏輯...

return true;

} finally

}

這裡除了使用redis incr/decr原子計數外,還對計數key增加了過期時間的邏輯,防止incr操作成功,而decr操作失敗,導致計數key的基數值越來越大而再無法降下去,最終將沒有請求再能夠進來,當然加過期時間也存在問題,當併發請求量一直在閾值之上,這時計數key會過期刪除,但此時仍積壓大量的請求,後來的請求又從新計數,可以把key的過期時間適當延長來降低影響。

使用Redis進行限流

通過使用註解 提供介面形式與引數形式2種方式 針對性的對介面進行限流,底層使用redis配合lua指令碼實現令牌桶。public class redisratelimiter public boolean tryacquire string flag,int maxpermits,int addra...

Redis 如何實現限流功能?

限流 這種事在生活中很常見,比如逢年過節時景點的限流,還有工作日的車輛單雙號限流等,有人可能會問為什麼要限流?我既然買了車子你還不讓我上路開?還有我倒景點買了門票,景點不是能賺更多的錢嗎?為什麼要限流呢?其實限流的主要目的就是為了保證整個系統的正常執行,比如以車輛限流為了,它的作用主要有兩個,乙個是...

Redis限流的幾種實現

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