> 데이터 베이스 > Redis > redis는 높은 동시성 계산을 구현합니다.

redis는 높은 동시성 계산을 구현합니다.

풀어 주다: 2020-04-27 09:12:13
앞으로
2628명이 탐색했습니다.

redis는 높은 동시성 계산을 구현합니다.

비즈니스 요구 사항에 카운터가 필요한 시나리오가 종종 있습니다. 예를 들어 휴대폰 번호는 하루에 5개의 문자 메시지를 보내는 것으로 제한되고, 인터페이스는 분당 요청 수로 제한되며, 인터페이스는 요청 횟수로 제한됩니다. 하루에 많은 전화 등 위의 요구 사항은 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 (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 소개 튜토리얼 칼럼을 주목하세요.

위 내용은 redis는 높은 동시성 계산을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:csdn.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿