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