Redis計數器實現併發控制,介面限流

2021-09-22 05:46:18 字數 592 閱讀 6899

redis incr 可以實現原子性的遞增,可應用於高併發的秒殺活動、分布式序列號生成等場景。這裡我使用它來計數實現一分鐘內只接受一次請求。

實現邏輯也很簡單:我們在接到簡訊傳送請求後,使用redis的incr設定乙個遞增key(key由固定字串+手機號碼組成),並判斷該key的數值,如果等於1,說明是第乙個請求,我們將該key值有效期設定為一分鐘;如果該key的數值大於1,說明是1分鐘內的多次請求,這時我們直接返回簡訊獲取頻繁異常。

3.1 jedis工具類用到的方法

/**

* 獲取快取自增值

* @param key

* @return

*/public static long increment(string key) {

long value = 0;

jedis jedis = null;

try {

jedis = getresource();

value =

利用Redis實現高併發計數器

業務需求中經常有需要用到計數器的場景 譬如乙個手機號一天限制傳送5條簡訊 乙個介面一分鐘限制多少請求 乙個介面一天限制呼叫多少次等等。使用redis的incr自增命令可以輕鬆實現以上需求。以乙個介面一天限制呼叫次數為例 是否拒絕服務 return private boolean denialofse...

利用Redis實現高併發計數器 請求限制

作者 李秀才 liboyi.blog.csdn.net article details 79427271 業務需求中經常有需要用到計數器的場景 譬如乙個手機號一天限制傳送5條簡訊 乙個介面一分鐘限制多少請求 乙個介面一天限制呼叫多少次等等。使用redis的incr自增命令可以輕鬆實現以上需求。以乙個...

使用Redis計數器防止併發請求

最近專案中有個需求,簡訊傳送的併發請求問題 業務需求是需要限制乙個號碼一分鐘內只能獲取一次隨機碼,之前的實現是簡訊傳送請求過來後,先去資料庫查詢傳送記錄,根據上一次的簡訊傳送時間和當前時間比較,如果時間差小於一分鐘,則提示簡訊獲取頻繁,如果超過一分鐘,則傳送簡訊,並記錄簡訊傳送日誌。簡訊傳送是乙個很...