@Override
  public boolean tryAcquire() throws InternalErrorException {
    long result = 0;
    try {
      result = (long) jedisTaskExecutor.evalsha(REDIS_LIMIT_SCRIPT_SHA1, key,
          String.valueOf(limit));
      return 1 == result;
    } catch (JedisNoScriptException e) {
      log.warn("no lua script cache on redis server.", e);
    } catch (JedisConnectionException e) {
      throw new InternalErrorException("Read redis error.", e);
    } catch (JedisException e) {
      throw new InternalErrorException("Read redis error.", e);
    }

    try {
      result = (long) jedisTaskExecutor.eval(REDIS_LIMIT_SCRIPT, key, String.valueOf(limit));
    } catch (JedisConnectionException ee) {
      throw new InternalErrorException("Read redis error.", ee);
    }

    return 1 == result;
  }
try to acquire an access token.
TODO(zheng): handle timeout exception separately!

@return true if get an access token successfully, otherwise, return false.
@throws InternalErrorException if failed to access Redis.
src/main/java/com/eudemon/ratelimiter/algorithm/DistributedFixedTimeWindowRateLimiter.java