자바 는 Redis 를 이용 하여 높 은 병발 카운터 의 예제 코드 를 실현 한다.

업무 수요 에서 계산 기 를 사용 해 야 하 는 장면 이 자주 있다.예 를 들 어 한 핸드폰 번호 가 하루 에 5 개의 문자 메 시 지 를 보 내 는 것 을 제한 하고 한 인터페이스 가 1 분 에 몇 번 요청 하 는 지 제한 하 며 한 인터페이스 가 하루 에 몇 번 호출 하 는 지 제한 하 는 등 이다.Redis 의 Incr 자체 증가 명령 을 사용 하면 이러한 수 요 를 쉽게 실현 할 수 있 습 니 다.하나의 인터페이스 에서 하루 호출 횟수 를 제한 하 는 것 을 예 로 들 면:

 /**
 *       
 * @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    
 * @param engineNo   
 * @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;
   }
 //     ,    ……
 }
인 터 페 이 스 를 호출 하기 전에 계수기 가 증가 한 후의 값 을 얻 고 제한 보다 적 으 면 줄 을 놓 고 뒤의 코드 를 실행 합 니 다.제한 보다 크 면 차단 합 니 다.
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;
 }
 /**
 *         
 * @author liboyi
 * @param key  
 * @param cacheSeconds     ,0    
 * @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;
 }
}
 자바 가 Redis 를 이용 하여 높 은 병발 계수 기 를 실현 하 는 예제 코드 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 Redis 높 은 병발 계수 기 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 지원 을 바 랍 니 다!

좋은 웹페이지 즐겨찾기