Skip to content

Commit 09f7064

Browse files
committed
Rate limiter Implement `hit()` in `RateLimiterSlidingDaoRedisImpl.java`.
1 parent aaf1fb0 commit 09f7064

2 files changed

Lines changed: 21 additions & 4 deletions

File tree

src/main/java/com/redislabs/university/RU102J/dao/RateLimiterSlidingDaoRedisImpl.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package com.redislabs.university.RU102J.dao;
22

3-
import redis.clients.jedis.JedisPool;
3+
import com.redislabs.university.RU102J.core.KeyHelper;
4+
import redis.clients.jedis.*;
5+
6+
import java.util.UUID;
47

58
public class RateLimiterSlidingDaoRedisImpl implements RateLimiter {
69

@@ -19,6 +22,23 @@ public RateLimiterSlidingDaoRedisImpl(JedisPool pool, long windowSizeMS,
1922
@Override
2023
public void hit(String name) throws RateLimitExceededException {
2124
// START CHALLENGE #7
25+
try (Jedis jedis = jedisPool.getResource()) {
26+
String keyName = "limiter" + ":" + windowSizeMS + ":" + name + ":" + maxHits;
27+
String key = KeyHelper.getKey(keyName);
28+
29+
final Transaction transaction = jedis.multi();
30+
final long currentTimeStamp = System.currentTimeMillis();
31+
final UUID uuid = UUID.randomUUID();
32+
final String member = "" + currentTimeStamp + "-" + uuid;
33+
transaction.zadd(key, currentTimeStamp, member);
34+
transaction.zremrangeByScore(key,0, currentTimeStamp - windowSizeMS);
35+
final Response<Long> hits = transaction.zcard(key);
36+
transaction.exec();
37+
38+
if (hits.get() > maxHits) {
39+
throw new RateLimitExceededException();
40+
}
41+
}
2242
// END CHALLENGE #7
2343
}
2444
}

src/test/java/com/redislabs/university/RU102J/dao/RateLimiterSlidingDaoRedisImplTest.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ public void flush() {
4747
keyManager.deleteKeys(jedis);
4848
}
4949

50-
@Ignore
5150
@Test
5251
public void hit() {
5352
int exceptionCount = 0;
@@ -64,7 +63,6 @@ public void hit() {
6463
assertThat(exceptionCount, is(0));
6564
}
6665

67-
@Ignore
6866
@Test
6967
public void hitOutsideLimit() {
7068
int exceptionCount = 0;
@@ -81,7 +79,6 @@ public void hitOutsideLimit() {
8179
assertThat(exceptionCount, is(2));
8280
}
8381

84-
@Ignore
8582
@Test
8683
public void hitOutsideWindow() throws InterruptedException {
8784
int exceptionCount = 0;

0 commit comments

Comments
 (0)