使用 resilience4j 实现海量访客 IP 的限流
关于使用 resilience4j 实现基于访客 IP 的限流,网上已经有很多文章了,我这里就不再赘述。 本文主要是要解决一个问题:如果访客量很大,会占用太多的内存来存放限流对象。 假设一个系统每天有上百万的访客,而基于 IP 的限流策略会导致 resilience4j 中用来存放每个 IP 对应的限流对象的哈希表巨大无比。 下面是限流的策略: //每分钟最多访问100次 RateLimiterConfig config = RateLimiterConfig.custom() .limitRefreshPeriod(Duration.ofMinutes(1)) .limitForPeriod(100) .timeoutDuration(Duration.ofMillis(0)) .build(); var registry = RateLimiterRegistry.of(config); 然后每来一个请求,就调用 registry.rateLimiter(<ip>) 方法做进一步限流,当这个 IP 量非常大时,所有这些信息都存在内存中,会导致内存占用膨胀太厉...