1 概述
系統(tǒng)中的接口通常都有限流,比如 70次/秒 ,如何保證我們的接口的調(diào)用次數(shù)在超過第三方接口限流的時(shí)候快速失敗呢?這時(shí)候就需要限流器了。下面是筆者用redis實(shí)現(xiàn)限流器的流程圖。
2 代碼
/** * 獲取限流權(quán)限 * @param key * @param millisecond 毫秒數(shù) * @param limitCount 限流次數(shù) * @return */ public static boolean getCurrentLimiting(String key, Long millisecond, Integer limitCount){ try { boolean currentLimitingLock = RedisDistributeLockUtil.lock(key); if(currentLimitingLock){ Long llen = RedisClient.llen(getCurrentLimitingRedisKey(key)); if(llen limitCount){ RedisClient.lpush(getCurrentLimitingRedisKey(key), DateUtil.current(false) + ""); return true; }else{ Long lastTime = Long.parseLong(RedisClient.lindex(getCurrentLimitingRedisKey(key), -1)); if((DateUtil.current(false) - lastTime) >= millisecond){ RedisClient.lpush(getCurrentLimitingRedisKey(key), DateUtil.current(false) + ""); RedisClient.ltrim(getCurrentLimitingRedisKey(key), 0, limitCount); return true; } } } }finally { RedisDistributeLockUtil.unlock(key); } return false; }
以上這篇基于Redis的限流器的實(shí)現(xiàn)(示例講解)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
標(biāo)簽:香港 揚(yáng)州 澳門 林芝 景德鎮(zhèn) 唐山 廣東 贛州
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《基于Redis的限流器的實(shí)現(xiàn)(示例講解)》,本文關(guān)鍵詞 基于,Redis,的,限流,器,實(shí)現(xiàn),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。