介绍
这篇文章主要介绍了怎么在Java中利用复述,实现一个高并发计数器功能,小编觉得不错,现在分享给大家,也给大家做个参考,一起跟随小编来看看吧!
Java是什么
Java是一门面向对象编程语言,可以编写桌面应用程序,网络应用程序,分布式系统和嵌入式系统应用程序。
以一个接口一天限制调用次数为例:
,/* * ,*是否拒绝服务 ,* @return ,*/,private boolean  denialOfService (String userId) { ,long 数=JedisUtil.setIncr (DateUtil.getDate() +“,“+用户名+“,“+“queryCarViolation",, 86400); ,如果(count<=10) { return 才能;假; ,} ,return 真实; 以前,}>/* * ,*查询违章 ,* @param plateNumber车牌 ,* @param vin 车架号 ,* @param engineNo发动机 ,* @param 请求 ,* @param 响应 ,* @throws 例外 ,*/,@RequestMapping (“/queryCarViolationList.json") ,@AuthorizationApi ,public void  queryCarViolationList (@CurrentToken Token 令牌,String plateNumber String vin, ,,,String engineNo, HttpServletRequest 请求,HttpServletResponse 响应),throws Exception { ,,String 用户id=token.getUserId (); ,,,,,//超过限制,拦截请求 ,,如果(denialOfService (userId)) { apiData才能(请求,响应,,ReqJson.error (CarError.ONLY_5_TIMES_A_DAY_CAN_BE_FOUND)); 返回才能; ,,} ,//没超过限制,业务逻辑…… 以前,}>每次调用接口之前,先获得下计数器自增后的值,如果小于限制,放行,执行后面的代码。如果大于限制,则拦截掉。
JedisUtil工具类:
public class JedisUtil { ,protected final  static Logger  Logger =, Logger.getLogger (JedisUtil.class); ,private static  JedisPool jedisPool; , ,@ autowired (required =,真的) ,public void  setJedisPool (JedisPool jedisPool), {=,,JedisUtil.jedisPool  jedisPool; ,}/* * ,*对某个键的值自增 ,* @author liboyi ,* @param key 键 ,* @param cacheSeconds 超时时间,0为不超时 ,* @return ,*/,public static  long setIncr (String 关键,int cacheSeconds), { ,long result =, 0; ,Jedis Jedis =,空; ,try { 时间=jedis 才能;jedisPool.getResource (); result 才能=jedis.incr(关键); if 才能;(result<=1,,,, cacheSeconds !=, 0), { jedis.expire才能(关键,cacheSeconds); ,,} logger.debug才能(“set “+, key +,,,=,,, +,结果); ,}catch (Exception e), { logger.warn才能(“set “+, key +,,,=,,, +,结果); ,}finally { jedisPool.returnResource才能(能); ,} ,return 结果; ,} }以上就是小编为大家收集整理的怎么在Java中利用复述,实现一个高并发计数器功能,如何觉得网站的内容还不错,欢迎将网站推荐给身边好友。
怎么在Java中利用复述,实现一个高并发计数器功能