Skip to content

Commit 819447c

Browse files
authored
Inject ClientSideCacheable via set method (#3882)
1 parent 3534996 commit 819447c

File tree

5 files changed

+22
-51
lines changed

5 files changed

+22
-51
lines changed

Diff for: src/main/java/redis/clients/jedis/csc/CaffeineClientSideCache.java

+2-17
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,7 @@ public CaffeineClientSideCache(Cache<Long, Object> caffeineCache) {
1616
}
1717

1818
public CaffeineClientSideCache(Cache<Long, Object> caffeineCache, CommandLongHasher commandHasher) {
19-
this(caffeineCache, commandHasher, DefaultClientSideCacheable.INSTANCE);
20-
}
21-
22-
public CaffeineClientSideCache(Cache<Long, Object> caffeineCache, ClientSideCacheable cacheable) {
23-
this(caffeineCache, SimpleCommandHasher.INSTANCE, cacheable);
24-
}
25-
26-
public CaffeineClientSideCache(Cache<Long, Object> caffeineCache, CommandLongHasher commandHasher, ClientSideCacheable cacheable) {
27-
super(commandHasher, cacheable);
19+
super(commandHasher);
2820
this.cache = caffeineCache;
2921
}
3022

@@ -61,8 +53,6 @@ public static class Builder {
6153
// not using a default value to avoid an object creation like 'new OpenHftHashing(hashFunction)'
6254
private CommandLongHasher commandHasher = SimpleCommandHasher.INSTANCE;
6355

64-
private ClientSideCacheable cacheable = DefaultClientSideCacheable.INSTANCE;
65-
6656
private Builder() { }
6757

6858
public Builder maximumSize(int size) {
@@ -80,19 +70,14 @@ public Builder commandHasher(CommandLongHasher commandHasher) {
8070
return this;
8171
}
8272

83-
public Builder cacheable(ClientSideCacheable cacheable) {
84-
this.cacheable = cacheable;
85-
return this;
86-
}
87-
8873
public CaffeineClientSideCache build() {
8974
Caffeine cb = Caffeine.newBuilder();
9075

9176
cb.maximumSize(maximumSize);
9277

9378
cb.expireAfterWrite(expireTime, expireTimeUnit);
9479

95-
return new CaffeineClientSideCache(cb.build(), commandHasher, cacheable);
80+
return new CaffeineClientSideCache(cb.build(), commandHasher);
9681
}
9782
}
9883
}

Diff for: src/main/java/redis/clients/jedis/csc/ClientSideCache.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.util.HashSet;
55
import java.util.List;
66
import java.util.Map;
7+
import java.util.Objects;
78
import java.util.Set;
89
import java.util.concurrent.ConcurrentHashMap;
910
import java.util.function.Function;
@@ -26,15 +27,14 @@ public abstract class ClientSideCache {
2627

2728
private final Map<ByteBuffer, Set<Long>> keyToCommandHashes = new ConcurrentHashMap<>();
2829
private final CommandLongHasher commandHasher;
29-
private final ClientSideCacheable cacheable;
30+
private ClientSideCacheable cacheable = DefaultClientSideCacheable.INSTANCE; // TODO: volatile
3031

3132
protected ClientSideCache(CommandLongHasher commandHasher) {
32-
this(commandHasher, DefaultClientSideCacheable.INSTANCE);
33+
this.commandHasher = commandHasher;
3334
}
3435

35-
protected ClientSideCache(CommandLongHasher commandHasher, ClientSideCacheable cacheable) {
36-
this.commandHasher = commandHasher;
37-
this.cacheable = cacheable;
36+
public void setCacheable(ClientSideCacheable cacheable) {
37+
this.cacheable = Objects.requireNonNull(cacheable, "'cacheable' must not be null");
3838
}
3939

4040
protected abstract void invalidateAllHashes();

Diff for: src/main/java/redis/clients/jedis/csc/GuavaClientSideCache.java

+3-19
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,6 @@ public GuavaClientSideCache(Cache<Long, Object> guavaCache, CommandLongHasher co
2525
this.cache = guavaCache;
2626
}
2727

28-
public GuavaClientSideCache(Cache<Long, Object> guavaCache, ClientSideCacheable cacheable) {
29-
this(guavaCache, new GuavaCommandHasher(GuavaCommandHasher.DEFAULT_HASH_FUNCTION), cacheable);
30-
}
31-
32-
public GuavaClientSideCache(Cache<Long, Object> cache, CommandLongHasher commandHasher, ClientSideCacheable cacheable) {
33-
super(commandHasher, cacheable);
34-
this.cache = cache;
35-
}
36-
3728
@Override
3829
protected final void invalidateAllHashes() {
3930
cache.invalidateAll();
@@ -68,8 +59,6 @@ public static class Builder {
6859
private HashFunction hashFunction = null;
6960
private CommandLongHasher commandHasher = null;
7061

71-
private ClientSideCacheable cacheable = DefaultClientSideCacheable.INSTANCE;
72-
7362
private Builder() { }
7463

7564
public Builder maximumSize(int size) {
@@ -94,21 +83,16 @@ public Builder commandHasher(CommandLongHasher commandHasher) {
9483
return this;
9584
}
9685

97-
public Builder cacheable(ClientSideCacheable cacheable) {
98-
this.cacheable = cacheable;
99-
return this;
100-
}
101-
10286
public GuavaClientSideCache build() {
10387
CacheBuilder cb = CacheBuilder.newBuilder();
10488

10589
cb.maximumSize(maximumSize);
10690

10791
cb.expireAfterWrite(expireTime, expireTimeUnit);
10892

109-
return hashFunction != null ? new GuavaClientSideCache(cb.build(), new GuavaCommandHasher(hashFunction), cacheable)
110-
: commandHasher != null ? new GuavaClientSideCache(cb.build(), commandHasher, cacheable)
111-
: new GuavaClientSideCache(cb.build(), cacheable);
93+
return hashFunction != null ? new GuavaClientSideCache(cb.build(), new GuavaCommandHasher(hashFunction))
94+
: commandHasher != null ? new GuavaClientSideCache(cb.build(), commandHasher)
95+
: new GuavaClientSideCache(cb.build());
11296
}
11397
}
11498
}

Diff for: src/test/java/redis/clients/jedis/csc/AllowAndDenyListClientSideCacheTest.java

+12-5
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import static org.junit.Assert.assertEquals;
66

77
import java.util.HashMap;
8+
import java.util.Map;
89
import org.hamcrest.Matchers;
910
import org.junit.Test;
1011

@@ -14,11 +15,17 @@
1415

1516
public class AllowAndDenyListClientSideCacheTest extends ClientSideCacheTestBase {
1617

18+
private static MapClientSideCache createMapClientSideCache(Map<Long, Object> map, ClientSideCacheable cacheable) {
19+
MapClientSideCache mapCache = new MapClientSideCache(map);
20+
mapCache.setCacheable(cacheable);
21+
return mapCache;
22+
}
23+
1724
@Test
1825
public void none() {
1926
HashMap<Long, Object> map = new HashMap<>();
2027
try (JedisPooled jedis = new JedisPooled(hnp, clientConfig.get(),
21-
new MapClientSideCache(map, new AllowAndDenyListWithStringKeys(null, null, null, null)),
28+
createMapClientSideCache(map, new AllowAndDenyListWithStringKeys(null, null, null, null)),
2229
singleConnectionPoolConfig.get())) {
2330
control.set("foo", "bar");
2431
assertThat(map, Matchers.aMapWithSize(0));
@@ -31,7 +38,7 @@ public void none() {
3138
public void whiteListCommand() {
3239
HashMap<Long, Object> map = new HashMap<>();
3340
try (JedisPooled jedis = new JedisPooled(hnp, clientConfig.get(),
34-
new MapClientSideCache(map, new AllowAndDenyListWithStringKeys(singleton(Protocol.Command.GET), null, null, null)),
41+
createMapClientSideCache(map, new AllowAndDenyListWithStringKeys(singleton(Protocol.Command.GET), null, null, null)),
3542
singleConnectionPoolConfig.get())) {
3643
control.set("foo", "bar");
3744
assertThat(map, Matchers.aMapWithSize(0));
@@ -44,7 +51,7 @@ public void whiteListCommand() {
4451
public void blackListCommand() {
4552
HashMap<Long, Object> map = new HashMap<>();
4653
try (JedisPooled jedis = new JedisPooled(hnp, clientConfig.get(),
47-
new MapClientSideCache(map, new AllowAndDenyListWithStringKeys(null, singleton(Protocol.Command.GET), null, null)),
54+
createMapClientSideCache(map, new AllowAndDenyListWithStringKeys(null, singleton(Protocol.Command.GET), null, null)),
4855
singleConnectionPoolConfig.get())) {
4956
control.set("foo", "bar");
5057
assertThat(map, Matchers.aMapWithSize(0));
@@ -57,7 +64,7 @@ public void blackListCommand() {
5764
public void whiteListKey() {
5865
HashMap<Long, Object> map = new HashMap<>();
5966
try (JedisPooled jedis = new JedisPooled(hnp, clientConfig.get(),
60-
new MapClientSideCache(map, new AllowAndDenyListWithStringKeys(null, null, singleton("foo"), null)),
67+
createMapClientSideCache(map, new AllowAndDenyListWithStringKeys(null, null, singleton("foo"), null)),
6168
singleConnectionPoolConfig.get())) {
6269
control.set("foo", "bar");
6370
assertThat(map, Matchers.aMapWithSize(0));
@@ -70,7 +77,7 @@ public void whiteListKey() {
7077
public void blackListKey() {
7178
HashMap<Long, Object> map = new HashMap<>();
7279
try (JedisPooled jedis = new JedisPooled(hnp, clientConfig.get(),
73-
new MapClientSideCache(map, new AllowAndDenyListWithStringKeys(null, null, null, singleton("foo"))),
80+
createMapClientSideCache(map, new AllowAndDenyListWithStringKeys(null, null, null, singleton("foo"))),
7481
singleConnectionPoolConfig.get())) {
7582
control.set("foo", "bar");
7683
assertThat(map, Matchers.aMapWithSize(0));

Diff for: src/test/java/redis/clients/jedis/csc/MapClientSideCache.java

-5
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,6 @@ public MapClientSideCache(Map<Long, Object> map) {
1818
this.cache = map;
1919
}
2020

21-
public MapClientSideCache(Map<Long, Object> cache, ClientSideCacheable cacheable) {
22-
super(SimpleCommandHasher.INSTANCE, cacheable);
23-
this.cache = cache;
24-
}
25-
2621
@Override
2722
protected final void invalidateAllHashes() {
2823
cache.clear();

0 commit comments

Comments
 (0)