2 回答

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

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