如何使用redis做限流(golang實現小樣)

在實際開發中,限流(Rate Limiting)是一種保護服務、避免接口被惡意刷流的常見技術。常用的限流算法有令牌桶、漏桶、固定窗口、滑動窗口等。由于Redis具備高性能和原子性操作,常常被用來實現分布式限流。

下面給出使用Golang結合Redis實現簡單限流的幾種常見方式(以“固定窗口計數”和“滑動窗口”為例)。使用的Go Redis庫為go-redis。


1. 固定窗口計數(Fixed Window Counter)

在單位時間窗口(如1秒、1分鐘)內計數,超過閾值則限流。

偽代碼思路:

  1. 用Redis的INCR自增某個key記錄當前窗口內的訪問次數。
  2. 使用EXPIRE設置Key過期時間為窗口大小。
  3. 如果計數超過閾值,說明被限流。

Go代碼示例:

package mainimport ("context""fmt""github.com/redis/go-redis/v9""time"
)var ctx = context.Background()func FixedWindowRateLimit(client *redis.Client, key string, limit int, window time.Duration) (bool, error) {// 每次請求自增計數cnt, err := client.Incr(ctx, key).Result()if err != nil {

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

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

相關文章

手寫ES6 Promise() 相關函數

手寫 Promise() 相關函數: Promise()、then()、catch()、finally() // 定義三種狀態常量 const PENDING pending const FULFILLED fulfilled const REJECTED rejectedclass MyPromise {/*定義狀態和結果兩個私有屬性:1.使用 # 語法(ES2022 官方私有字…

Redis學習專題(五)緩存穿透、緩存擊穿、緩存雪崩

目錄 一、緩存穿透 緩存穿透的原因: 緩存穿透的現象: 緩存穿透的解決辦法: 二、緩存擊穿 緩存擊穿的原因: 緩存擊穿的現象: 緩存擊穿的解決辦法: 三、緩存雪崩 緩存雪崩的原因: 緩存雪崩的現象&…

【Hadoop】大數據技術之 MapReduce

目錄 一、MapReduce概述 1.1 MapReduce 定義 1.2 MapReduce優缺點 1.3 MapReduce 核心思想 1.4 MapReduce 進程 1.5 常用數據序列化類型 1.6 MapReduce 編程規范 二、WordCound 案例 2.1 環境準備 2.2 編寫程序 三、MapReduce 工作流程 一、MapReduce概述 1.1 MapRe…

國際前沿知識系列三:解決泛化能力不足問題

目錄 國際前沿知識系列三:解決泛化能力不足問題 一、子類建模法與分類建模法在腦區應變預測中的應用 (一)子類建模法 案例分析 (二)分類建模法 案例分析 二、基于遷移學習和數據融合的大腦應變預測模型改良 &a…

client.chat.completions.create方法參數詳解

response client.chat.completions.create(model"gpt-3.5-turbo", # 必需參數messages[], # 必需參數temperature1.0, # 可選參數max_tokensNone, # 可選參數top_p1.0, # 可選參數frequency_penalty0.0, # 可選參數presenc…

iOS 15.4.1 TrollStore(巨魔商店)安裝教程詳解:第二篇

?? iOS 15.4.1 TrollStore(巨魔商店)安裝教程詳解 ? 前言??? 如何安裝 TrollStore?第一步:打開 Safari 瀏覽器第二步:選擇對應系統版本安裝方式第三步:訪問地址,下載配置文件(plist)第四步:安裝配置文件第五步:“jailbreaks.app” 請求安裝 TrollHelper第六步…

SQL的RAND用法和指定生成隨機數的范圍

SQL中的RAND函數能夠滿足多種隨機數生成的需求。通過合理地使用種子、結合一些SQL語句,我們可以實現靈活的隨機數生成。在數據填充、數據處理、數據分析中經常需要用RAND生成的隨機數。 用法1 生成隨機浮點數,其返回值在0(包括0)…

AppAgentx 開源AI手機操控使用分享

項目地址: https://appagentx.github.io/?utm_sourceai-bot.cn GitHub倉庫: https://github.com/Westlake-AGI-Lab/AppAgentX/tree/main arXiv技術論文:https://arxiv.org/pdf/2503.02268 AppAgentx是什么: AppAgentX 是西湖大學推出的一種自我進化式 GUI 代理框架。它通過…

[原創]X86C++反匯編01.IDA和提取簽名

https://bpsend.net/thread-415-1-1.html 用VC6.0新建一個控制臺工程 編譯成 debug 和 Release 2個版本 應ida分別查看2種版本的程序 高版本ida 可能會直接定位到函數入口,正常情況下,我們需要先調試找到關鍵,找到關鍵以后點再通過調試設置api斷點,讀寫斷點等,找到程序的關鍵…

vs2022 Qt Visual Studio Tools插件設置

安裝之后,需要指定QT中msvc編譯器的位置,點擊下圖Location右邊的按鈕即可 選擇msvc2022_64\bin目錄下的 qmake.exe 另一個問題,雙擊UI文件不能打開設計界面 設置打開方式 選擇msvc2022_64\bin目錄下的designer.exe 確定即可 然后設置為默認值即可 確定…

C++代碼隨想錄刷題知識分享-----兩數之和(哈希表)三種算法逐個擊破

題目描述 給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和為目標值的那兩個整數,并返回它們的下標。 每個輸入只對應一個答案。同一個元素不能重復使用。你可以按任意順序返回答案。 示例 輸入: nums [2, 7, 11, 15], ta…

List介紹

什么是List 在集合框架中,List是一個接口,繼承自Collection Collection也是一個接口,該接口中規范了后序容器中常用的一些方法 Iterable也是一個接口,表示實現該接口的類是可以逐個元素進行遍歷的,具體如下&#xff1…

深入理解API:從概念到實戰

引言 在現代軟件開發中,API(Application Programming Interface)無處不在。無論是調用第三方服務、訪問操作系統功能,還是使用編程語言的標準庫,API 都扮演著關鍵角色。但對于許多初學者來說,API 仍然是一…

織夢dedecms登錄后臺出現Safe Alert Request Error step 2

今天一個客戶在安裝織夢dedecms時候,安裝完成后登錄后臺就出現“Safe Alert Request Error step 2”,常用dedecms的朋友都知道,這是織夢的安全機制,在程序覺得有sql注入等攻擊時候,會有這種提示。 1、起初我以為是文件…

BLIP3-o:理解和生成統一的多模態模型

文章目錄 研究背景BLIP3-o 框架3個關鍵問題BLIP3-o模型總結 paper link: https://arxiv.org/pdf/2505.09568from saleforce research 研究背景 隨著gpt4o圖像生成和編輯的應用火爆,如何構造能夠同時處理圖像理解和生成任務的統一多模態模型,成為研究的…

練習小項目7:天氣狀態切換器

🧠 項目目標: 點擊按鈕切換不同天氣狀態,背景或圖標隨之變化。 ? 功能描述: 顯示當前天氣(如:?? 晴天 / ?? 多云 / 🌧? 雨天) 點擊“切換天氣”按鈕,每點擊一次…

esp32 lvgl9.2版本,透明底色圖片的,透明部分被渲染成黑色,不隨背景顏色變化解決辦法

在lvgl圖片轉換工具時,指定轉換格式為ARGB8888 代指Alpha RGB RGB565(不支持 Alpha),透明像素會被解釋為黑色。改用 ARGB8888。 有問題的 轉換為ARGB8888后的

AI智能分析網關V4區域入侵檢測算法:全功能覆蓋,多場景守護安防安全

一、方案背景? 在當今社會,安全需求日益增長,傳統安防監控系統因效率低、精準度不足等問題,已無法滿足現代安全防范的要求。AI智能分析網關V4區域入侵檢測算法憑借其先進的人工智能技術,能夠實時、精準地識別區域內的異常入侵行…

Phantom 視頻生成的流程

Phantom 視頻生成的流程 flyfish Phantom 視頻生成的實踐 Phantom 視頻生成的流程 Phantom 視頻生成的命令 Wan2.1 圖生視頻 支持批量生成 Wan2.1 文生視頻 支持批量生成、參數化配置和多語言提示詞管理 Wan2.1 加速推理方法 Wan2.1 通過首尾幀生成視頻 AnyText2 在圖片里玩…

瑞薩單片機筆記

1.CS for CC map文件中顯示變量地址 Link Option->List->Output Symbol information 2.FDL庫函數 pfdl_status_t R_FDL_Write(pfdl_u16 index, __near pfdl_u08* buffer, pfdl_u16 bytecount) pfdl_status_t R_FDL_Read(pfdl_u16 index, __near pfdl_u08* buffer, pfdl_…