anchor.diff:  ----
   
   ==== Example 1 - limiting access to HTTP server by IP address
  -> Imagine that you develop any Servlet based WEB application and want to limit access per IP basis.
  -You want to use same limits for each IP - 30 requests per minute.
  -
  -ServletFilter would be obvious place to check limits:
  +> Imagine that you develop any Servlet-based WEB application and want to limit access per IP basis.
  +You want to use the same limits for each IP - 30 requests per minute.
  +
  +ServletFilter would be the obvious place to check limits:
   [source, java]
   ----
   public class IpThrottlingFilter implements javax.servlet.Filter {
  -    
  +
       private static final BucketConfiguration configuration = BucketConfiguration.builder()
             .addLimit(Bandwidth.simple(30, Duration.ofMinutes(1)))
             .build();
  
positive.code: }
  ----
  The check does 4000 increments of integer in parallel and verifies that no one update has been missed.
  If check passed then your JCache provider is compatible with Bucket4j, the throttling will work fine in distributed and concurrent environment. If check is not passed, then reach to the particular JCache provider team and consult why its implementation misses the writes.
negative.code:     // cache for storing token buckets, where IP is key.
      @Inject
      private javax.cache.Cache<String, byte[]> cache;
  
      private ProxyManager<String> buckets;
  
      @Override
      public void init(FilterConfig filterConfig) throws ServletException {
           // init bucket registry
           buckets = new JCacheProxyManager<>(cache);
      }
  
      @Override
      public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
          HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
          String ip = IpHelper.getIpFromRequest(httpRequest);
  
          // acquire cheap proxy to the bucket
          Bucket bucket = proxyManager.builder().build(key, configuration);
  
          // tryConsume returns false immediately if no tokens available with the bucket
  