1 | <?php |
||
20 | final class RedisRateLimiter extends AbstractRateLimiter |
||
21 | { |
||
22 | /** |
||
23 | * @var Redis |
||
24 | */ |
||
25 | private $redis; |
||
26 | |||
27 | public function __construct(Redis $redis, int $limit, int $window) |
||
28 | { |
||
29 | $this->redis = $redis; |
||
30 | |||
31 | parent::__construct($limit, $window); |
||
32 | } |
||
33 | |||
34 | protected function get(string $key, int $default) : int |
||
35 | { |
||
36 | $value = $this->redis->get($key); |
||
37 | |||
38 | if (false === $value) { |
||
39 | return $default; |
||
40 | } |
||
41 | |||
42 | return (int) $value; |
||
43 | } |
||
44 | |||
45 | protected function init(string $key) |
||
46 | { |
||
47 | $this->redis->setex($key, $this->window, 1); |
||
48 | } |
||
49 | |||
50 | protected function increment(string $key) |
||
54 | |||
55 | protected function ttl(string $key) : float |
||
56 | { |
||
57 | return max($this->redis->pttl($key) / 1000, 0); |
||
59 | } |
||
60 |