[HttpGet] public async Task<ActionResult<string>> Get() { //限流週期:5秒 int period = 5; //週期內請求數限制:5次,即限制每五秒只能請求五次 int maxCount = 5; long uid = 123456; string action = "login"; string key = string.Format("hist:{0}{1}", uid, action); long current = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); var batch = db.CreateBatch(); var tasks = new List<Task>(); //加入SortedSet tasks.Add(batch.SortedSetAddAsync(key, current, current)); //移除五秒之前的記錄 tasks.Add(batch.SortedSetRemoveRangeByScoreAsync(key, 0, current - period * 1000)); //重置過期時間 tasks.Add(batch.KeyExpireAsync(key, TimeSpan.FromSeconds(period + 1))); batch.Execute(); //獲取請求的次數 long currentCount = await db.SortedSetLengthAsync(key); //返回是否大於限制次數 bool res = currentCount <= maxCount; return res ? "未被限流,正常請求" : "超過請求頻次,限制請求"; }
一段基於Redis-SortedSet的限流程式碼
相關文章
- 基於kubernetes的分散式限流分散式
- 關於反射的導致panic的一段程式碼,求解答反射
- 第一段JavaScript程式碼JavaScript
- 一段監視 DOM 的神奇程式碼
- 補全一段jQuery程式碼jQuery
- 分享一段牛逼程式碼
- 基於redis實現的四種常見的限流策略Redis
- Envoy熔斷限流實踐(二)Rainbond基於RLS服務全侷限流AI
- [java併發程式設計]基於訊號量semaphore實現限流器Java程式設計
- 如何寫一段死鎖程式碼
- 一段讓人瑟瑟發抖的ABAP程式碼
- python怎麼隱藏一段程式碼Python
- 幽默:朋友發給我一段程式碼
- 一個輕量級的基於RateLimiter的分散式限流實現MIT分散式
- 月半談(二)基於 Redis 的限流器-簡單計數器Redis
- 貼一段網站被"後門"後的程式碼網站
- 分享一段Android許可權設定的程式碼Android
- 基於Python的自動化程式碼審計Python
- 基於 AST 的程式碼自動生成方案AST
- Wizzdi :基於 Spring Boot 的無程式碼系統Spring Boot
- 關於限流實現的思考
- FPGA一段式verilog程式碼例項FPGA
- 基於Redis實現一套支援排隊等待的限流器Redis
- 微服務架構 | 5.2 基於 Sentinel 的服務限流及熔斷微服務架構
- 一段程式碼完全遮蔽360瀏覽器的廣告瀏覽器
- 基於Matlab Coder將matlab程式碼轉換成c程式碼MatlabC程式
- 基於多重替換方式的iOS程式碼混淆方案iOS
- 資料 + 程式碼,基於 Keras 的煙火檢測Keras
- 基於 goc 的 Golang 程式碼 VsCode 實時染色方案GolangVSCode
- 基於vs外掛的abp程式碼生成器
- 微軟推出基於Excel的低程式碼程式語言:Power Fx微軟Excel
- 基於令牌桶演算法實現一個限流器演算法
- 一段簡單的顯示當前頁面FPS的程式碼
- 一段柯里化函式程式碼閱讀函式
- 遊戲推薦業務中基於 sentinel 的動態限流實踐遊戲
- php基於redis的list型資料結構實現ip限流操作PHPRedis資料結構
- 基於原型鏈劫持的前端程式碼插樁實踐原型前端
- 基於MySql主從分離的程式碼層實現MySql