一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - Java利用Redis實(shí)現(xiàn)高并發(fā)計(jì)數(shù)器的示例代碼

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

2021-08-12 11:41李秀才 Java教程

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

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

?
1
2
3
4
5
6
7
8
9
10
11
/**
* 是否拒絕服務(wù)
* @return
*/
private boolean denialOfService(String userId){
long count=JedisUtil.setIncr(DateUtil.getDate()+"&"+userId+"&"+"queryCarViolation", 86400);
if(count<=10){
 return false;
}
return true;
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
   /**
* 查詢違章
* @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();
     //超過限制,攔截請求
  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工具類:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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;
 }
 /**
 * 對某個(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)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/qq_33556185/article/details/79427271

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲成年人免费网站 | 毛毛片在线 | 小早川怜子息梦精在线播放 | 手机看片国产自拍 | 成人看片免费无限观看视频 | 欧美人妖草草xxoo | 婷婷麻豆 | 蜜桃影像传媒推广 | 国产成人精品高清在线 | 国产福利不卡视频在免费 | 纲手被强喷水羞羞漫画 | 日本一卡二卡3卡四卡网站精品 | 91久久偷偷做嫩草影院免费 | 精品亚洲麻豆1区2区3区 | 欧美日韩一二三区免费视频观看 | 天堂8在线天堂资源在线 | 我被男人下药添得好爽 | 女人pp被扒开流水了 | 国产一级黄色录像 | 成人午夜影院在线观看 | 日本高清中文 | 成年性午夜免费视频网站不卡 | 美女精品永久福利在线 | free哆拍拍免费永久视频 | 黑人与老女人做受 | 亚洲 无码 制服 日韩 | 99久久无色码中文字幕 | 四虎精品永久在线网址 | 日本三不卡 | 好姑娘在线观看完整版免费 | 久久精品成人免费网站 | 5g影院天天爽爽 | 毛片手机在线视频免费观看 | 日b视频免费 | 91拍拍| 日韩国产欧美精品综合二区 | 牧教师在线观看 | 国产精品青青青高清在线观看 | 楚乔传第二部免费完整 | 肉搏潘金莲三级18春 | 姐姐不~不可以动漫在线观看 |