利用Redis實現高併發計數器

2021-09-19 21:57:59 字數 1122 閱讀 2430

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

/**

* 是否拒絕服務

* @return

*/private boolean denialofservice(string userid)

return true;

} /**

* 查詢違章

* @param platenumber車牌

* @param vin 車架號

* @param engineno發動機

//沒超過限制,業務邏輯……

}

每次呼叫介面之前,先獲得下計數器自增後的值,如果小於限制,放行,執行後面的**。如果大於限制,則攔截掉。

jedisutil工具類:

public class jedisutil

/** * 對某個鍵的值自增

* @author liboyi

* @param key 鍵

* @param cacheseconds 超時時間,0為不超時

* @return

*/public static long setincr(string key, int cacheseconds)

logger.debug("set "+ key + " = " + result);

} catch (exception e) finally

return result;

}原文:

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

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

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

redis incr 可以實現原子性的遞增,可應用於高併發的秒殺活動 分布式序列號生成等場景。這裡我使用它來計數實現一分鐘內只接受一次請求。實現邏輯也很簡單 我們在接到簡訊傳送請求後,使用redis的incr設定乙個遞增key key由固定字串 手機號碼組成 並判斷該key的數值,如果等於1,說明是...

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

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