欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java利用Redis實(shí)現(xiàn)高并發(fā)計(jì)數(shù)器的示例代碼

 更新時(shí)間:2021年02月23日 10:38:55   作者:李秀才  
這篇文章主要介紹了Java利用Redis實(shí)現(xiàn)高并發(fā)計(jì)數(shù)器的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

業(yè)務(wù)需求中經(jīng)常有需要用到計(jì)數(shù)器的場(chǎng)景:譬如一個(gè)手機(jī)號(hào)一天限制發(fā)送5條短信、一個(gè)接口一分鐘限制多少請(qǐng)求、一個(gè)接口一天限制調(diào)用多少次等等。使用Redis的Incr自增命令可以輕松實(shí)現(xiàn)以上需求。以一個(gè)接口一天限制調(diào)用次數(shù)為例:

 /**
 * 是否拒絕服務(wù)
 * @return
 */
 private boolean denialOfService(String userId){
 long count=JedisUtil.setIncr(DateUtil.getDate()+"&"+userId+"&"+"queryCarViolation", 86400);
 if(count<=10){
  return false;
 }
 return true;
 }
    /**
 * 查詢違章
 * @param plateNumber車牌
 * @param vin 車架號(hào)
 * @param engineNo發(fā)動(dòng)機(jī)
 * @param request
 * @param response
 * @throws Exception
 */
 @RequestMapping("/queryCarViolationList.json")
 @AuthorizationApi
 public void queryCarViolationList(@CurrentToken Token token,String plateNumber,String vin,
    String engineNo,HttpServletRequest request,HttpServletResponse response) throws Exception {
   String userId=token.getUserId();
      //超過限制,攔截請(qǐng)求
   if(denialOfService(userId)){
  apiData(request, response, ReqJson.error(CarError.ONLY_5_TIMES_A_DAY_CAN_BE_FOUND));
  return;
   }
 //沒超過限制,業(yè)務(wù)邏輯……
 }

每次調(diào)用接口之前,先獲得下計(jì)數(shù)器自增后的值,如果小于限制,放行,執(zhí)行后面的代碼。如果大于限制,則攔截掉。

JedisUtil工具類:

public class JedisUtil {
 protected final static Logger logger = Logger.getLogger(JedisUtil.class);
 private static JedisPool jedisPool;
 
 @Autowired(required = true)
 public void setJedisPool(JedisPool jedisPool) {
 JedisUtil.jedisPool = jedisPool;
 }
 /**
 * 對(duì)某個(gè)鍵的值自增
 * @author liboyi
 * @param key 鍵
 * @param cacheSeconds 超時(shí)時(shí)間,0為不超時(shí)
 * @return
 */
 public static long setIncr(String key, int cacheSeconds) {
 long result = 0;
 Jedis jedis = null;
 try {
  jedis = jedisPool.getResource();
  result =jedis.incr(key);
  if (result<=1 && cacheSeconds != 0) {
  jedis.expire(key, cacheSeconds);
  }
  logger.debug("set "+ key + " = " + result);
 } catch (Exception e) {
  logger.warn("set "+ key + " = " + result);
 } finally {
  jedisPool.returnResource(jedis);
 }
 return result;
 }
}

 到此這篇關(guān)于Java利用Redis實(shí)現(xiàn)高并發(fā)計(jì)數(shù)器的示例代碼的文章就介紹到這了,更多相關(guān)Java Redis 高并發(fā)計(jì)數(shù)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java多線程實(shí)戰(zhàn)之單例模式與多線程的實(shí)例詳解

    Java多線程實(shí)戰(zhàn)之單例模式與多線程的實(shí)例詳解

    今天小編就為大家分享一篇關(guān)于Java多線程實(shí)戰(zhàn)之單例模式與多線程的實(shí)例詳解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • Spring中使用騰訊云發(fā)送短信驗(yàn)證碼的實(shí)現(xiàn)示例

    Spring中使用騰訊云發(fā)送短信驗(yàn)證碼的實(shí)現(xiàn)示例

    本文主要介紹了Spring?中?使用騰訊云發(fā)送短信驗(yàn)證碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 基于SpringBoot使用MyBatis插件的問題

    基于SpringBoot使用MyBatis插件的問題

    MyBatis-Plus并不能為我們解決所有問題,例如一些復(fù)雜的SQL,多表聯(lián)查,我們就需要自己去編寫代碼和SQL語句,我們?cè)撊绾慰焖俚慕鉀Q這個(gè)問題呢,這個(gè)時(shí)候可以使用MyBatisX插件,今天小編給大家?guī)砹薙pringBoot使用MyBatis插件問題,感興趣的朋友一起看看吧
    2022-03-03
  • IDEA生成可運(yùn)行jar包(包含第三方j(luò)ar包)流程詳解

    IDEA生成可運(yùn)行jar包(包含第三方j(luò)ar包)流程詳解

    這篇文章主要介紹了IDEA生成可運(yùn)行jar包(包含第三方j(luò)ar包)流程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 詳解MybatisPlus集成nacos導(dǎo)致druid連接不上數(shù)據(jù)庫

    詳解MybatisPlus集成nacos導(dǎo)致druid連接不上數(shù)據(jù)庫

    這篇文章主要介紹了詳解MybatisPlus集成nacos導(dǎo)致druid連接不上數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Spring整合websocket整合應(yīng)用示例(下)

    Spring整合websocket整合應(yīng)用示例(下)

    這篇文章主要介紹了Spring整合websocket整合應(yīng)用示例(下)的相關(guān)資料,需要的朋友可以參考下
    2016-04-04
  • Mybatis-Plus實(shí)現(xiàn)自動(dòng)生成代碼的操作步驟

    Mybatis-Plus實(shí)現(xiàn)自動(dòng)生成代碼的操作步驟

    AutoGenerator 是 MyBatis-Plus 的代碼生成器,通過 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各個(gè)模塊的代碼,極大的提升了開發(fā)效率,本文將給大家介紹Mybatis-Plus實(shí)現(xiàn)自動(dòng)生成代碼的操作步驟
    2023-10-10
  • MyBatis中#{}和${}的區(qū)別詳解

    MyBatis中#{}和${}的區(qū)別詳解

    mybatis和ibatis總體來講都差不多的。下面小編給大家探討下mybatis中#{}和${}的區(qū)別,感興趣的朋友一起學(xué)習(xí)吧
    2016-08-08
  • 基于Hadoop實(shí)現(xiàn)Knn算法

    基于Hadoop實(shí)現(xiàn)Knn算法

    這篇文章主要為大家詳細(xì) 介紹了基于Hadoop實(shí)現(xiàn)Knn算法的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • SSM 整合的配合文件(分享)

    SSM 整合的配合文件(分享)

    下面小編就為大家分享一篇SSM 整合的配合文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12

最新評(píng)論