From b6830b17a3f590eccf74d8d3837efce448006326 Mon Sep 17 00:00:00 2001 From: M Sazzadul Hoque <7600764+sazzad16@users.noreply.github.com> Date: Sun, 10 Mar 2024 16:15:12 +0600 Subject: [PATCH] Rename to Hash'er's --- .../jedis/csc/CaffeineClientSideCache.java | 21 +++++++------ .../clients/jedis/csc/ClientSideCache.java | 14 ++++----- .../jedis/csc/GuavaClientSideCache.java | 30 +++++++++---------- ...ndHash.java => AbstractCommandHasher.java} | 2 +- .../jedis/csc/hash/CommandLongHash.java | 16 ---------- .../jedis/csc/hash/CommandLongHasher.java | 16 ++++++++++ ...mmandHash.java => GuavaCommandHasher.java} | 4 +-- ...andHash.java => OpenHftCommandHasher.java} | 4 +-- ....java => PrimitiveArrayCommandHasher.java} | 7 ++++- .../jedis/csc/ClientSideCacheLibsTest.java | 4 +-- .../clients/jedis/csc/MapClientSideCache.java | 4 +-- 11 files changed, 63 insertions(+), 59 deletions(-) rename src/main/java/redis/clients/jedis/csc/hash/{AbstractCommandHash.java => AbstractCommandHasher.java} (89%) delete mode 100644 src/main/java/redis/clients/jedis/csc/hash/CommandLongHash.java create mode 100644 src/main/java/redis/clients/jedis/csc/hash/CommandLongHasher.java rename src/main/java/redis/clients/jedis/csc/hash/{GuavaCommandHash.java => GuavaCommandHasher.java} (84%) rename src/main/java/redis/clients/jedis/csc/hash/{OpenHftCommandHash.java => OpenHftCommandHasher.java} (77%) rename src/main/java/redis/clients/jedis/csc/hash/{PrimitiveArrayHash.java => PrimitiveArrayCommandHasher.java} (53%) diff --git a/src/main/java/redis/clients/jedis/csc/CaffeineClientSideCache.java b/src/main/java/redis/clients/jedis/csc/CaffeineClientSideCache.java index eb80d5e705..8ff993d6c7 100644 --- a/src/main/java/redis/clients/jedis/csc/CaffeineClientSideCache.java +++ b/src/main/java/redis/clients/jedis/csc/CaffeineClientSideCache.java @@ -4,23 +4,23 @@ import com.github.benmanes.caffeine.cache.Caffeine; import java.util.concurrent.TimeUnit; -import redis.clients.jedis.csc.hash.CommandLongHash; -import redis.clients.jedis.csc.hash.OpenHftCommandHash; +import redis.clients.jedis.csc.hash.CommandLongHasher; +import redis.clients.jedis.csc.hash.OpenHftCommandHasher; public class CaffeineClientSideCache extends ClientSideCache { private final Cache cache; public CaffeineClientSideCache(Cache caffeineCache) { - this(caffeineCache, new OpenHftCommandHash(OpenHftCommandHash.DEFAULT_HASH_FUNCTION), DefaultClientSideCacheable.INSTANCE); + this(caffeineCache, DefaultClientSideCacheable.INSTANCE); } public CaffeineClientSideCache(Cache caffeineCache, ClientSideCacheable cacheable) { - this(caffeineCache, new OpenHftCommandHash(OpenHftCommandHash.DEFAULT_HASH_FUNCTION), cacheable); + this(caffeineCache, new OpenHftCommandHasher(OpenHftCommandHasher.DEFAULT_HASH_FUNCTION), cacheable); } - public CaffeineClientSideCache(Cache caffeineCache, CommandLongHash hashing, ClientSideCacheable cacheable) { - super(hashing, cacheable); + public CaffeineClientSideCache(Cache caffeineCache, CommandLongHasher commandHasher, ClientSideCacheable cacheable) { + super(commandHasher, cacheable); this.cache = caffeineCache; } @@ -55,7 +55,7 @@ public static class Builder { private final TimeUnit expireTimeUnit = TimeUnit.SECONDS; // not using a default value to avoid an object creation like 'new OpenHftHashing(hashFunction)' - private CommandLongHash longHashing = null; + private CommandLongHasher commandHasher = null; private ClientSideCacheable cacheable = DefaultClientSideCacheable.INSTANCE; @@ -71,8 +71,8 @@ public Builder ttl(int seconds) { return this; } - public Builder hash(CommandLongHash hashing) { - this.longHashing = hashing; + public Builder commandHasher(CommandLongHasher commandHasher) { + this.commandHasher = commandHasher; return this; } @@ -88,8 +88,7 @@ public CaffeineClientSideCache build() { cb.expireAfterWrite(expireTime, expireTimeUnit); - return longHashing != null - ? new CaffeineClientSideCache(cb.build(), longHashing, cacheable) + return commandHasher != null ? new CaffeineClientSideCache(cb.build(), commandHasher, cacheable) : new CaffeineClientSideCache(cb.build(), cacheable); } } diff --git a/src/main/java/redis/clients/jedis/csc/ClientSideCache.java b/src/main/java/redis/clients/jedis/csc/ClientSideCache.java index 6b507fcb89..d0ad06e6a4 100644 --- a/src/main/java/redis/clients/jedis/csc/ClientSideCache.java +++ b/src/main/java/redis/clients/jedis/csc/ClientSideCache.java @@ -9,7 +9,7 @@ import java.util.function.Function; import redis.clients.jedis.CommandObject; -import redis.clients.jedis.csc.hash.CommandLongHash; +import redis.clients.jedis.csc.hash.CommandLongHasher; import redis.clients.jedis.util.SafeEncoder; /** @@ -23,15 +23,15 @@ public abstract class ClientSideCache { protected static final int DEFAULT_EXPIRE_SECONDS = 100; private final Map> keyToCommandHashes = new ConcurrentHashMap<>(); - private final CommandLongHash commandHashing; + private final CommandLongHasher commandHasher; private final ClientSideCacheable cacheable; - protected ClientSideCache(CommandLongHash commandHashing) { - this(commandHashing, DefaultClientSideCacheable.INSTANCE); + protected ClientSideCache(CommandLongHasher commandHasher) { + this(commandHasher, DefaultClientSideCacheable.INSTANCE); } - protected ClientSideCache(CommandLongHash commandHashing, ClientSideCacheable cacheable) { - this.commandHashing = commandHashing; + protected ClientSideCache(CommandLongHasher commandHasher, ClientSideCacheable cacheable) { + this.commandHasher = commandHasher; this.cacheable = cacheable; } @@ -81,7 +81,7 @@ public final T get(Function, T> loader, CommandObject co return loader.apply(command); } - final long hash = commandHashing.hash(command); + final long hash = commandHasher.hash(command); T value = (T) getValue(hash); if (value != null) { diff --git a/src/main/java/redis/clients/jedis/csc/GuavaClientSideCache.java b/src/main/java/redis/clients/jedis/csc/GuavaClientSideCache.java index e25489bced..76446db52a 100644 --- a/src/main/java/redis/clients/jedis/csc/GuavaClientSideCache.java +++ b/src/main/java/redis/clients/jedis/csc/GuavaClientSideCache.java @@ -5,32 +5,32 @@ import com.google.common.hash.HashFunction; import java.util.concurrent.TimeUnit; -import redis.clients.jedis.csc.hash.CommandLongHash; -import redis.clients.jedis.csc.hash.GuavaCommandHash; +import redis.clients.jedis.csc.hash.CommandLongHasher; +import redis.clients.jedis.csc.hash.GuavaCommandHasher; public class GuavaClientSideCache extends ClientSideCache { private final Cache cache; public GuavaClientSideCache(Cache guavaCache) { - this(guavaCache, GuavaCommandHash.DEFAULT_HASH_FUNCTION); + this(guavaCache, GuavaCommandHasher.DEFAULT_HASH_FUNCTION); } public GuavaClientSideCache(Cache guavaCache, HashFunction hashFunction) { - this(guavaCache, new GuavaCommandHash(hashFunction)); + this(guavaCache, new GuavaCommandHasher(hashFunction)); } - public GuavaClientSideCache(Cache guavaCache, CommandLongHash hashing) { - super(hashing); + public GuavaClientSideCache(Cache guavaCache, CommandLongHasher commandHasher) { + super(commandHasher); this.cache = guavaCache; } public GuavaClientSideCache(Cache guavaCache, ClientSideCacheable cacheable) { - this(guavaCache, new GuavaCommandHash(GuavaCommandHash.DEFAULT_HASH_FUNCTION), cacheable); + this(guavaCache, new GuavaCommandHasher(GuavaCommandHasher.DEFAULT_HASH_FUNCTION), cacheable); } - public GuavaClientSideCache(Cache cache, CommandLongHash hashing, ClientSideCacheable cacheable) { - super(hashing, cacheable); + public GuavaClientSideCache(Cache cache, CommandLongHasher commandHasher, ClientSideCacheable cacheable) { + super(commandHasher, cacheable); this.cache = cache; } @@ -66,7 +66,7 @@ public static class Builder { // not using a default value to avoid an object creation like 'new GuavaHashing(hashFunction)' private HashFunction hashFunction = null; - private CommandLongHash longHashing = null; + private CommandLongHasher commandHasher = null; private ClientSideCacheable cacheable = DefaultClientSideCacheable.INSTANCE; @@ -84,12 +84,12 @@ public Builder ttl(int seconds) { public Builder hashFunction(HashFunction function) { this.hashFunction = function; - this.longHashing = null; + this.commandHasher = null; return this; } - public Builder hash(CommandLongHash hashing) { - this.longHashing = hashing; + public Builder commandHasher(CommandLongHasher commandHasher) { + this.commandHasher = commandHasher; this.hashFunction = null; return this; } @@ -106,8 +106,8 @@ public GuavaClientSideCache build() { cb.expireAfterWrite(expireTime, expireTimeUnit); - return longHashing != null ? new GuavaClientSideCache(cb.build(), longHashing, cacheable) - : hashFunction != null ? new GuavaClientSideCache(cb.build(), new GuavaCommandHash(hashFunction), cacheable) + return commandHasher != null ? new GuavaClientSideCache(cb.build(), commandHasher, cacheable) + : hashFunction != null ? new GuavaClientSideCache(cb.build(), new GuavaCommandHasher(hashFunction), cacheable) : new GuavaClientSideCache(cb.build(), cacheable); } } diff --git a/src/main/java/redis/clients/jedis/csc/hash/AbstractCommandHash.java b/src/main/java/redis/clients/jedis/csc/hash/AbstractCommandHasher.java similarity index 89% rename from src/main/java/redis/clients/jedis/csc/hash/AbstractCommandHash.java rename to src/main/java/redis/clients/jedis/csc/hash/AbstractCommandHasher.java index 1acdf0dc06..2c71e4ea80 100644 --- a/src/main/java/redis/clients/jedis/csc/hash/AbstractCommandHash.java +++ b/src/main/java/redis/clients/jedis/csc/hash/AbstractCommandHasher.java @@ -4,7 +4,7 @@ import redis.clients.jedis.CommandObject; import redis.clients.jedis.args.Rawable; -public abstract class AbstractCommandHash implements CommandLongHash { +public abstract class AbstractCommandHasher implements CommandLongHasher { @Override public final long hash(CommandObject command) { diff --git a/src/main/java/redis/clients/jedis/csc/hash/CommandLongHash.java b/src/main/java/redis/clients/jedis/csc/hash/CommandLongHash.java deleted file mode 100644 index 4e03f37628..0000000000 --- a/src/main/java/redis/clients/jedis/csc/hash/CommandLongHash.java +++ /dev/null @@ -1,16 +0,0 @@ -package redis.clients.jedis.csc.hash; - -import redis.clients.jedis.CommandObject; - -/** - * The interface for hashing a command object for client-side caching. - */ -public interface CommandLongHash { - - /** - * Produce a 64-bit signed hash from a command object. - * @param command the command object - * @return 64-bit signed hash - */ - long hash(CommandObject command); -} diff --git a/src/main/java/redis/clients/jedis/csc/hash/CommandLongHasher.java b/src/main/java/redis/clients/jedis/csc/hash/CommandLongHasher.java new file mode 100644 index 0000000000..bb0b03e072 --- /dev/null +++ b/src/main/java/redis/clients/jedis/csc/hash/CommandLongHasher.java @@ -0,0 +1,16 @@ +package redis.clients.jedis.csc.hash; + +import redis.clients.jedis.CommandObject; + +/** + * The interface for hashing a command object to support client-side caching. + */ +public interface CommandLongHasher { + + /** + * Produce a 64-bit signed hash value from a command object. + * @param command the command object + * @return 64-bit signed hash value + */ + long hash(CommandObject command); +} diff --git a/src/main/java/redis/clients/jedis/csc/hash/GuavaCommandHash.java b/src/main/java/redis/clients/jedis/csc/hash/GuavaCommandHasher.java similarity index 84% rename from src/main/java/redis/clients/jedis/csc/hash/GuavaCommandHash.java rename to src/main/java/redis/clients/jedis/csc/hash/GuavaCommandHasher.java index 7249e8d3b3..8c07245273 100644 --- a/src/main/java/redis/clients/jedis/csc/hash/GuavaCommandHash.java +++ b/src/main/java/redis/clients/jedis/csc/hash/GuavaCommandHasher.java @@ -4,13 +4,13 @@ import com.google.common.hash.Hasher; import redis.clients.jedis.CommandObject; -public class GuavaCommandHash implements CommandLongHash { +public class GuavaCommandHasher implements CommandLongHasher { public static final HashFunction DEFAULT_HASH_FUNCTION = com.google.common.hash.Hashing.fingerprint2011(); private final HashFunction function; - public GuavaCommandHash(HashFunction function) { + public GuavaCommandHasher(HashFunction function) { this.function = function; } diff --git a/src/main/java/redis/clients/jedis/csc/hash/OpenHftCommandHash.java b/src/main/java/redis/clients/jedis/csc/hash/OpenHftCommandHasher.java similarity index 77% rename from src/main/java/redis/clients/jedis/csc/hash/OpenHftCommandHash.java rename to src/main/java/redis/clients/jedis/csc/hash/OpenHftCommandHasher.java index 0a38115987..e2a7bced3d 100644 --- a/src/main/java/redis/clients/jedis/csc/hash/OpenHftCommandHash.java +++ b/src/main/java/redis/clients/jedis/csc/hash/OpenHftCommandHasher.java @@ -2,13 +2,13 @@ import net.openhft.hashing.LongHashFunction; -public class OpenHftCommandHash extends PrimitiveArrayHash implements CommandLongHash { +public class OpenHftCommandHasher extends PrimitiveArrayCommandHasher implements CommandLongHasher { public static final LongHashFunction DEFAULT_HASH_FUNCTION = LongHashFunction.xx3(); private final LongHashFunction function; - public OpenHftCommandHash(LongHashFunction function) { + public OpenHftCommandHasher(LongHashFunction function) { this.function = function; } diff --git a/src/main/java/redis/clients/jedis/csc/hash/PrimitiveArrayHash.java b/src/main/java/redis/clients/jedis/csc/hash/PrimitiveArrayCommandHasher.java similarity index 53% rename from src/main/java/redis/clients/jedis/csc/hash/PrimitiveArrayHash.java rename to src/main/java/redis/clients/jedis/csc/hash/PrimitiveArrayCommandHasher.java index 671a227bfb..ed4a9ff97c 100644 --- a/src/main/java/redis/clients/jedis/csc/hash/PrimitiveArrayHash.java +++ b/src/main/java/redis/clients/jedis/csc/hash/PrimitiveArrayCommandHasher.java @@ -3,7 +3,12 @@ import redis.clients.jedis.Builder; import redis.clients.jedis.args.Rawable; -public abstract class PrimitiveArrayHash extends AbstractCommandHash { +/** + * It is possible to extend {@link PrimitiveArrayCommandHasher this abstract class} in order to implement + * {@link CommandLongHasher} as {@link PrimitiveArrayCommandHasher#hashLongs(long[])} and + * {@link PrimitiveArrayCommandHasher#hashBytes(byte[])} can be supported by almost all Java hashing libraries. + */ +public abstract class PrimitiveArrayCommandHasher extends AbstractCommandHasher { @Override protected final long hashRawable(Rawable raw) { diff --git a/src/test/java/redis/clients/jedis/csc/ClientSideCacheLibsTest.java b/src/test/java/redis/clients/jedis/csc/ClientSideCacheLibsTest.java index 2880a53ef1..189332b260 100644 --- a/src/test/java/redis/clients/jedis/csc/ClientSideCacheLibsTest.java +++ b/src/test/java/redis/clients/jedis/csc/ClientSideCacheLibsTest.java @@ -23,7 +23,7 @@ import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisClientConfig; import redis.clients.jedis.JedisPooled; -import redis.clients.jedis.csc.hash.OpenHftCommandHash; +import redis.clients.jedis.csc.hash.OpenHftCommandHasher; public class ClientSideCacheLibsTest { @@ -93,7 +93,7 @@ public void guavaMore() { @Test public void caffeineSimple() { CaffeineClientSideCache caffeine = CaffeineClientSideCache.builder().maximumSize(10).ttl(10) - .hash(new OpenHftCommandHash(LongHashFunction.xx())).build(); + .commandHasher(new OpenHftCommandHasher(LongHashFunction.xx())).build(); try (JedisPooled jedis = new JedisPooled(hnp, clientConfig.get(), caffeine)) { control.set("foo", "bar"); assertEquals("bar", jedis.get("foo")); diff --git a/src/test/java/redis/clients/jedis/csc/MapClientSideCache.java b/src/test/java/redis/clients/jedis/csc/MapClientSideCache.java index af5f0ab735..4ff4e4367a 100644 --- a/src/test/java/redis/clients/jedis/csc/MapClientSideCache.java +++ b/src/test/java/redis/clients/jedis/csc/MapClientSideCache.java @@ -4,11 +4,11 @@ import java.util.HashMap; import java.util.Map; -import redis.clients.jedis.csc.hash.PrimitiveArrayHash; +import redis.clients.jedis.csc.hash.PrimitiveArrayCommandHasher; public class MapClientSideCache extends ClientSideCache { - private static final PrimitiveArrayHash HASHING = new PrimitiveArrayHash() { + private static final PrimitiveArrayCommandHasher HASHING = new PrimitiveArrayCommandHasher() { @Override protected long hashLongs(long[] longs) {