2 回答

TA貢獻1831條經(jīng)驗 獲得超10個贊
如果這是為了簡單的速率限制,那么使用排序集的滑動窗口方法是我們看到的大多數(shù)Redis用戶實現(xiàn)的,https://github.com/Redislabs-Solution-Architects/RateLimitingExample/blob/sliding_window/app.py
如果您設(shè)置在泄漏的存儲桶上,則可以考慮使用每個消費者ID(api令牌/ IP地址等)的redis流,如下所示
請求進入消費者 ID
XADD 請求-[消費者 ID] MAXLEN [存儲桶大小]
生成一個 go 例程(如果該使用者 ID 需要),如果請求的 XLEN ([使用者 ID] 為 0,則獲取當(dāng)前時間
XREAD 計數(shù) [number_of_requests_per_period] 塊 [時間段 - 1 毫秒] 流請求 -[使用者 ID] 獲取當(dāng)前時間并在剩余時間段內(nèi)休眠
https://redis.io/commands#stream 詳細(xì)介紹了流的工作原理

TA貢獻1810條經(jīng)驗 獲得超5個贊
有幾種方法可以實現(xiàn)泄漏的存儲桶,但該過程應(yīng)該有兩個單獨的部分。一個將內(nèi)容放入存儲桶中,另一個在有要刪除的內(nèi)容時按設(shè)定的時間間隔刪除它們。
您可以使用單獨的 goroutine,該 goroutine 將按設(shè)定的時間間隔使用消息。這將簡化您的代碼,因為在一個代碼路徑上,您只需要查看隊列大小并丟棄數(shù)據(jù)包,而另一個代碼路徑將僅使用任何存在的內(nèi)容。
- 2 回答
- 0 關(guān)注
- 87 瀏覽
添加回答
舉報