package com.qianwen.core.redis.ratelimiter; import java.util.Collections; import java.util.List; import java.util.concurrent.TimeUnit; import org.springframework.core.env.Environment; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.script.RedisScript; /* loaded from: blade-starter-redis-9.3.0.0-SNAPSHOT.jar:org/springblade/core/redis/ratelimiter/RedisRateLimiterClient.class */ public class RedisRateLimiterClient implements RateLimiterClient { private static final String REDIS_KEY_PREFIX = "limiter:"; private static final long FAIL_CODE = 0; private final StringRedisTemplate redisTemplate; private final RedisScript> script; private final Environment environment; public RedisRateLimiterClient(final StringRedisTemplate redisTemplate, final RedisScript> script, final Environment environment) { this.redisTemplate = redisTemplate; this.script = script; this.environment = environment; } @Override // org.springblade.core.redis.ratelimiter.RateLimiterClient public boolean isAllowed(String key, long max, long ttl, TimeUnit timeUnit) { String redisKeyBuilder = REDIS_KEY_PREFIX + getApplicationName(this.environment) + ':' + key; List keys = Collections.singletonList(redisKeyBuilder); long now = System.currentTimeMillis(); long ttlMillis = timeUnit.toMillis(ttl); List results = (List) this.redisTemplate.execute(this.script, keys, new Object[]{max + "", ttlMillis + "", now + ""}); if (results == null || results.isEmpty()) { return false; } Long result = results.get(0); return result.longValue() != FAIL_CODE; } private static String getApplicationName(Environment environment) { return environment.getProperty("spring.application.name", ""); } }