學習小記-使用Redis的令牌桶算法實現分布式限流

在介紹令牌桶算法前先介紹一下漏桶算法(Leaky Bucket)

漏桶算法(Leaky Bucket)

漏桶算法是一種固定容量的容器模型,它通過控制數據流入和流出的速度來限制數據的傳輸速率。漏桶算法的主要特點包括:

  • 固定容量:漏桶的容量是固定的,一旦桶滿,多余的數據將被丟棄或拒絕。
  • 持續泄露:桶中的“水”(數據)以固定速率持續流出。
  • 突發處理:可以在桶未滿時快速處理突發流量,但一旦桶滿,流量將被限制。

Redisson 本身沒有直接提供漏桶算法(Leaky Bucket)的實現,如果你需要在 Redisson 中實現漏桶算法,可以考慮以下步驟:

  1. 使用 sorted set 存儲令牌:在 Redis 中使用 sorted set 存儲令牌,每個令牌都有一個時間戳作為分數(score)。

  2. 添加令牌:以固定的時間間隔向 sorted set 中添加令牌,每個令牌的分數是添加時的時間戳。(可以用定時任務添加)

  3. 獲取令牌:當需要發送請求時,從 sorted set 中移除(或彈出)一個令牌,并檢查當前時間是否大于令牌的時間戳加上一個允許的最大延遲。

  4. 丟棄令牌:如果當前時間超過了令牌的時間戳加上最大延遲,則丟棄該令牌,模擬“漏水”。

  5. 限流邏輯:如果 sorted set 中沒有可用的令牌,則拒絕請求或將其放入等待隊列。

令牌桶算法(Token Bucket)

令牌桶算法是一種更加靈活的流量控制算法,它通過生成令牌(Tokens)來允許數據以一定速率發送。令牌桶算法的主要特點包括:

  • 令牌生成:以固定速率在桶中生成令牌。
  • 令牌使用:發送數據時需要消耗桶中的令牌,如果沒有足夠的令牌,數據發送將被延遲或丟棄。
  • 突發能力:可以在令牌充足時發送較大流量,之后流量將根據令牌生成速率受到限制。

Redisson 框架提供了基于令牌桶算法的限流功能,可以通過 RRateLimiter 接口實現。以下是 Redisson 中使用令牌桶算法的一個簡單示例:

import org.redisson.api.RRateLimiter;
import org.redisson.api.RedissonClient;// 假設redissonClient已經創建并配置好連接
RRateLimiter rateLimiter = redissonClient.getRateLimiter("myRateLimiter");// 配置令牌桶參數
rateLimiter.trySetRate(20, RateType.OVERALL); // 總共可以處理20個請求
rateLimiter.trySetRate(1, RateIntervalUnit.SECONDS); // 每秒生成1個令牌// 嘗試獲取一個令牌,如果成功,返回true,否則返回false
boolean acquired = rateLimiter.tryAcquire();// 使用令牌執行操作
if (acquired) {// 執行受限操作
} else {// 處理限流邏輯,例如重試或等待
}// 關閉Redisson客戶端
redissonClient.shutdown();

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/44940.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/44940.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/44940.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

鴻蒙開發:Universal Keystore Kit(密鑰管理服務)【密鑰派生(C/C++)】

密鑰派生(C/C) 以HKDF256密鑰為例,完成密鑰派生。具體的場景介紹及支持的算法規格,請參考[密鑰生成支持的算法]。 在CMake腳本中鏈接相關動態庫 target_link_libraries(entry PUBLIC libhuks_ndk.z.so)開發步驟 生成密鑰 指定密鑰別名。 初始化密鑰屬…

通過電壓差判定無源晶振是否起振正確嗎?

在電子工程中,無源晶振作為許多數字電路的基礎組件,其是否成功起振對于系統的正常運行至關重要。然而,通過簡單檢測晶振兩端的電壓差來判斷晶振是否工作,這一方法存在一定的誤區,晶發電子將深入探討這一話題&#xff0…

2008年下半年軟件設計師【下午題】真題及答案

文章目錄 2008年下半年軟件設計師下午題--真題2008年下半年軟件設計師下午題--答案 2008年下半年軟件設計師下午題–真題 2008年下半年軟件設計師下午題–答案

四川赤橙宏海商務信息咨詢有限公司抖音電商服務靠譜嗎?

在數字化浪潮席卷全球的今天,電商行業蓬勃發展,各種新興電商平臺層出不窮。其中,抖音電商以其獨特的社交屬性和龐大的用戶基礎,迅速崛起為行業新星。四川赤橙宏海商務信息咨詢有限公司,作為專注于抖音電商服務的佼佼者…

個人怎么交易現貨黃金:加速形態

我們作為普通個人,在現貨黃金市場中交易就需要掌握相應的現貨黃金投資技巧。下面我們就來介紹一個,個人怎么交易現貨黃金的形態——加速形態。 加速形態是用于判斷市場趨勢力竭的情況,這種趨勢可以是上升,也可以是下跌。但是要注意…

用Qwt進行圖表和數據可視化開發

目錄 Qwt介紹 示例應用場景 典型QWT開發流程 舉一些Qwt的例子,多繪制幾種類型的圖像 1. 繪制折線圖 (Line Plot) 2. 繪制散點圖 (Scatter Plot) 3. 繪制柱狀圖 (Bar Plot) 4. 繪制直方圖 (Histogram) Qwt介紹 QWT開發主要涉及使用QWT庫進行圖表和數據可視化…

晉升業內新寵兒,MoE模型給了AI行業兩條關鍵出路

文 | 智能相對論 作者 | 陳泊丞 今年以來,MoE模型成了AI行業的新寵兒。 一方面,越來越多的廠商在自家的閉源模型上采用了MoE架構。在海外,OpenAI的GPT-4、谷歌的Gemini、Mistral AI的Mistral、xAI的Grok-1等主流大模型都采用了MoE架構。 …

第三方配件也能適配蘋果了,iOS 18與iPadOS 18將支持快速配對

蘋果公司以其對用戶體驗的不懈追求和對創新技術的不斷探索而聞名。隨著iOS 18和iPadOS 18的發布,蘋果再次證明了其在移動操作系統領域的領先地位。 最新系統版本中的一項引人注目的功能,便是對藍牙和Wi-Fi配件的配對方式進行了重大改進,不僅…

python如何計算兩個時間相差多少秒鐘,分鐘,小時,天,月,年

使用場景:在做上課記錄系統的時候,有上課開始時間和上課結束時間,需要計算這兩個時間的插值,以分鐘為單位。 封裝方法如下: from datetime import datetimedef sub_seconds(date1: str "2024-07-11 12:33:33&q…

【CORS 報錯】跨域請求問題:CORS 多種環境下的解決方案

🔥 個人主頁:空白詩 文章目錄 一、CORS錯誤的常見原因二、解決方案1. Vue3 Vite項目下的解決方案創建Vue3 Vite項目配置Vite的代理發送請求 2. jQuery項目下的解決方案使用CORS請求頭使用JSONP 3. 其他環境下的解決方案使用服務器端代理設置CORS頭使用…

PS拉框選擇工具

Photoshop(PS)中的拉框選擇工具,也稱為選框工具,是圖像處理中非常基礎且強大的工具之一。它允許用戶通過繪制矩形、橢圓形以及單行、單列的選擇框來選定圖像中的特定區域。本教程將詳細介紹選框工具的使用方法、技巧及其屬性設置。…

嵌入式Qt開發C++核心編程知識萬字總結

C核心編程 文章目錄 C核心編程1、程序的內存模型2、函數高級1.函數的默認參數2.函數的占位參數3.函數重載1.基本語法2.注意事項 3、類和對象1.類1.類的組成2.類的訪問權限3.class和struct的區別 2.構造函數(Constructor)1.示例2.特點 3.析構函數&#xf…

前端vue3 登錄頁面 響應式開發

一個登錄頁面 我直接上代碼了 結構是這樣的 Login 頁面 <template><a-layout class"login-box"><a-layout-content class"login-content"><a-row align"middle" justify"center" class"login-content-ma…

蝙蝠避障:為盲人出行插上科技的翅膀

在這個五彩斑斕的世界里&#xff0c;每一步都充滿了探索與驚喜。但對于我這樣的視障者來說&#xff0c;每一次出行都是一場未知的冒險。我時常面臨著難以想象的挑戰&#xff1a;如何安全地穿越繁忙的街道&#xff0c;怎樣準確地識別前方的障礙物&#xff0c;乃至簡單地找到回家…

viewmodel創建及使用分析

1、相關的類 ViewModelStore &#xff1a;管理viewModel實例&#xff0c;內部包含一個Map用來存儲viewmodel&#xff0c;內部包括put、get、clear等方法ViewModelProvider &#xff1a;管理ViewModelStore和Factory&#xff0c;Factory里面有create方法是創建對應的viewmodel的…

Facebook的未來藍圖:從元宇宙到虛擬現實的跨越

隨著科技的不斷演進和社會的數字化轉型&#xff0c;虛擬現實&#xff08;VR&#xff09;和增強現實&#xff08;AR&#xff09;作為下一代計算平臺正逐漸走進人們的視野。作為全球領先的科技公司之一&#xff0c;Facebook正在積極探索并推動這一領域的發展&#xff0c;以實現其…

嫌云服務器太貴,使用內網穿透代替

企業與個人開發者常常面臨一個現實問題&#xff1a;高昂的云服務器成本。隨著業務需求的增長&#xff0c;持續的服務器租賃費用可能成為負擔。然而&#xff0c;在這個充滿創新的時代&#xff0c;一種名為“內網穿透”的技術正逐漸成為解決這一難題的優選方案。本文將探討內網穿…

深度學習基礎與實戰:Python實現

深度學習基礎與實戰&#xff1a;Python實現 深度學習是機器學習的一個重要分支&#xff0c;通過多層神經網絡實現對數據的自動特征提取和建模。本文將介紹深度學習的基礎概念、常用框架以及一個完整的實戰項目&#xff0c;幫助讀者從基礎入門到實際應用。 目錄 深度學習概述…

CF 1986D. Mathematical Problem

原題鏈接&#xff1a;Problem - 1986D - Codeforces 題意&#xff1a;一串長度最多為20的由數字組成的字符串&#xff0c;在這些數字中間可以添加字符串長度減去二數量的符號&#xff0c;加或者乘&#xff0c;例如1234&#xff0c;就可以添加加號或者乘號二個&#xff0c;變成…

vue中el-table前端導出excel數據表格

一、el-table為正常時&#xff0c;導出方法如下&#xff1a; 1.添加導出按鈕 <el-button class"greenLinearbg dc" size"small" click"webExportTotalExcel()" v-if"totalBillShow">導出</el-button>2.導出方法 // we…