You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by je...@apache.org on 2022/02/17 22:19:38 UTC

[geode] branch develop updated: GEODE-9998: Upgrade Jedis client from 3.6.3 to 4.1.1 (#7340)

This is an automated email from the ASF dual-hosted git repository.

jensdeppe pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/develop by this push:
     new 9305169  GEODE-9998: Upgrade Jedis client from 3.6.3 to 4.1.1 (#7340)
9305169 is described below

commit 93051691eb5bda1277e901d04c554aa95419f9df
Author: Eric Zoerner <zo...@vmware.com>
AuthorDate: Thu Feb 17 14:18:02 2022 -0800

    GEODE-9998: Upgrade Jedis client from 3.6.3 to 4.1.1 (#7340)
---
 .../src/test/resources/expected-pom.xml            |   2 +-
 .../gradle/plugins/DependencyConstraints.groovy    |   2 +-
 .../apache/geode/redis/mocks/MockSubscriber.java   |  23 +---
 .../geode/redis/UserExpirationDUnitTest.java       |   3 +-
 .../key/AbstractRenameRedirectionsDUnitTest.java   |   2 +-
 .../commands/executor/key/RenameDUnitTest.java     |   2 +-
 .../sortedset/ZAddIncrOptionDUnitTest.java         |   8 +-
 .../commands/executor/sortedset/ZRemDUnitTest.java |   6 +-
 .../sortedset/ZRemRangeByLexDUnitTest.java         |   6 +-
 .../sortedset/ZRemRangeByRankDUnitTest.java        |  24 +++-
 .../sortedset/ZRemRangeByScoreDUnitTest.java       |   6 +-
 .../auth/AuthWhileServersRestartDUnitTest.java     |   7 +-
 .../StringsKillMultipleServersDUnitTest.java       |   9 +-
 .../AbstractCommandPipeliningIntegrationTest.java  |  14 ++-
 .../cluster/AbstractClusterIntegrationTest.java    |   4 +-
 .../executor/cluster/ClusterIntegrationTest.java   |   2 +-
 .../connection/AbstractEchoIntegrationTest.java    |   8 +-
 .../hash/AbstractHScanIntegrationTest.java         |  16 +--
 .../hash/AbstractHashesIntegrationTest.java        |   2 +-
 .../key/AbstractExistsIntegrationTest.java         |   6 +-
 .../key/AbstractExpireIntegrationTest.java         |   3 +-
 .../key/AbstractPersistIntegrationTest.java        |   3 +-
 .../executor/key/AbstractScanIntegrationTest.java  |   4 +-
 .../commands/executor/key/ScanIntegrationTest.java |   4 +-
 .../pubsub/AbstractSubCommandsIntegrationTest.java |  64 +++++------
 .../AbstractSubscriptionsIntegrationTest.java      |   6 +-
 .../server/AbstractHitsMissesIntegrationTest.java  |   4 +-
 .../server/AbstractInfoIntegrationTest.java        |   2 +-
 .../server/AbstractSlowlogIntegrationTest.java     |   2 +-
 .../executor/server/ShutdownIntegrationTest.java   |  12 +-
 .../executor/set/AbstractSScanIntegrationTest.java |  12 +-
 .../AbstractZInterStoreIntegrationTest.java        | 123 +++++++++++----------
 .../sortedset/AbstractZPopMaxIntegrationTest.java  |   2 +-
 .../sortedset/AbstractZPopMinIntegrationTest.java  |   2 +-
 .../AbstractZRangeByScoreIntegrationTest.java      |   2 +-
 .../sortedset/AbstractZRangeIntegrationTest.java   |   6 +-
 .../AbstractZRevRangeByScoreIntegrationTest.java   |   8 +-
 .../AbstractZRevRangeIntegrationTest.java          |   7 +-
 .../sortedset/AbstractZScanIntegrationTest.java    |  14 +--
 .../AbstractZUnionStoreIntegrationTest.java        |  75 ++++++-------
 .../string/AbstractBitOpIntegrationTest.java       |   2 +-
 .../string/AbstractBitPosIntegrationTest.java      |   2 +-
 42 files changed, 254 insertions(+), 257 deletions(-)

diff --git a/boms/geode-all-bom/src/test/resources/expected-pom.xml b/boms/geode-all-bom/src/test/resources/expected-pom.xml
index 927e660..09bd9b3 100644
--- a/boms/geode-all-bom/src/test/resources/expected-pom.xml
+++ b/boms/geode-all-bom/src/test/resources/expected-pom.xml
@@ -460,7 +460,7 @@
       <dependency>
         <groupId>redis.clients</groupId>
         <artifactId>jedis</artifactId>
-        <version>3.6.3</version>
+        <version>4.1.1</version>
       </dependency>
       <dependency>
         <groupId>xerces</groupId>
diff --git a/buildSrc/src/main/groovy/org/apache/geode/gradle/plugins/DependencyConstraints.groovy b/buildSrc/src/main/groovy/org/apache/geode/gradle/plugins/DependencyConstraints.groovy
index 2633533..9041707 100644
--- a/buildSrc/src/main/groovy/org/apache/geode/gradle/plugins/DependencyConstraints.groovy
+++ b/buildSrc/src/main/groovy/org/apache/geode/gradle/plugins/DependencyConstraints.groovy
@@ -172,7 +172,7 @@ class DependencyConstraints implements Plugin<Project> {
         api(group: 'org.springframework.shell', name: 'spring-shell', version: get('springshell.version'))
         api(group: 'org.testcontainers', name: 'testcontainers', version: '1.15.3')
         api(group: 'pl.pragmatists', name: 'JUnitParams', version: '1.1.0')
-        api(group: 'redis.clients', name: 'jedis', version: '3.6.3')
+        api(group: 'redis.clients', name: 'jedis', version: '4.1.1')
         api(group: 'xerces', name: 'xercesImpl', version: '2.12.0')
         api(group: 'xml-apis', name: 'xml-apis', version: '1.4.01')
         api(group: 'org.junit-pioneer', name: 'junit-pioneer', version: '1.5.0')
diff --git a/geode-for-redis/src/commonTest/java/org/apache/geode/redis/mocks/MockSubscriber.java b/geode-for-redis/src/commonTest/java/org/apache/geode/redis/mocks/MockSubscriber.java
index e0549e9..bdd2592 100644
--- a/geode-for-redis/src/commonTest/java/org/apache/geode/redis/mocks/MockSubscriber.java
+++ b/geode-for-redis/src/commonTest/java/org/apache/geode/redis/mocks/MockSubscriber.java
@@ -24,9 +24,7 @@ import java.util.Objects;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
-import redis.clients.jedis.Client;
 import redis.clients.jedis.JedisPubSub;
-import redis.clients.jedis.exceptions.JedisConnectionException;
 
 
 public class MockSubscriber extends JedisPubSub {
@@ -45,8 +43,6 @@ public class MockSubscriber extends JedisPubSub {
       Collections.synchronizedList(new ArrayList<>());
   private CountDownLatch messageReceivedLatch = new CountDownLatch(0);
   private CountDownLatch pMessageReceivedLatch = new CountDownLatch(0);
-  private String localSocketAddress;
-  private Client client;
 
   public MockSubscriber() {
     this(new CountDownLatch(1));
@@ -65,13 +61,6 @@ public class MockSubscriber extends JedisPubSub {
     this.pUnsubscriptionLatch = pUnsubscriptionLatch;
   }
 
-  @Override
-  public void proceed(Client client, String... channels) {
-    localSocketAddress = client.getSocket().getLocalSocketAddress().toString();
-    this.client = client;
-    super.proceed(client, channels);
-  }
-
   private void switchThreadName(String suffix) {
     String threadName = Thread.currentThread().getName();
     int suffixIndex = threadName.indexOf(" -- ");
@@ -79,7 +68,7 @@ public class MockSubscriber extends JedisPubSub {
       threadName = threadName.substring(0, suffixIndex);
     }
 
-    threadName += " -- " + suffix + " [" + localSocketAddress + "]";
+    threadName += " -- " + suffix;
     Thread.currentThread().setName(threadName);
   }
 
@@ -133,16 +122,6 @@ public class MockSubscriber extends JedisPubSub {
     receivedPings.add(pattern);
   }
 
-  // JedisPubSub ping with message is not currently possible, will submit a PR
-  // (https://github.com/xetorthio/jedis/issues/2049)
-  public void ping(String message) {
-    if (client == null) {
-      throw new JedisConnectionException("JedisPubSub is not subscribed to a Jedis instance.");
-    } else {
-      client.ping(message);
-    }
-  }
-
   private static final int AWAIT_TIMEOUT_MILLIS = 30000;
 
   public void awaitSubscribe(String channel) {
diff --git a/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/UserExpirationDUnitTest.java b/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/UserExpirationDUnitTest.java
index 2bb28a8..f749018 100644
--- a/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/UserExpirationDUnitTest.java
+++ b/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/UserExpirationDUnitTest.java
@@ -26,7 +26,6 @@ import org.junit.After;
 import org.junit.BeforeClass;
 import org.junit.ClassRule;
 import org.junit.Test;
-import redis.clients.jedis.BinaryJedisCluster;
 import redis.clients.jedis.HostAndPort;
 import redis.clients.jedis.JedisCluster;
 
@@ -64,7 +63,7 @@ public class UserExpirationDUnitTest {
     jedis = new JedisCluster(new HostAndPort(BIND_ADDRESS, redisPort),
         REDIS_CLIENT_TIMEOUT,
         REDIS_CLIENT_TIMEOUT,
-        BinaryJedisCluster.DEFAULT_MAX_ATTEMPTS,
+        JedisCluster.DEFAULT_MAX_ATTEMPTS,
         USER, USER, "test-client",
         new GenericObjectPoolConfig<>());
   }
diff --git a/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/commands/executor/key/AbstractRenameRedirectionsDUnitTest.java b/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/commands/executor/key/AbstractRenameRedirectionsDUnitTest.java
index 64ad65f..7abbea9 100644
--- a/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/commands/executor/key/AbstractRenameRedirectionsDUnitTest.java
+++ b/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/commands/executor/key/AbstractRenameRedirectionsDUnitTest.java
@@ -69,7 +69,7 @@ public abstract class AbstractRenameRedirectionsDUnitTest implements RedisIntegr
 
   private String getKeyOnDifferentServerAs(String antiKey, String prefix) {
     ClusterNodes clusterNodes;
-    try (Jedis j = jedis.getConnectionFromSlot(0)) {
+    try (final Jedis j = new Jedis(jedis.getConnectionFromSlot(0))) {
       clusterNodes = ClusterNodes.parseClusterNodes(j.clusterNodes());
     }
     int antiSlot = JedisClusterCRC16.getCRC16(antiKey) % RegionProvider.REDIS_SLOTS;
diff --git a/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/commands/executor/key/RenameDUnitTest.java b/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/commands/executor/key/RenameDUnitTest.java
index 02dba47..6af44c6 100644
--- a/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/commands/executor/key/RenameDUnitTest.java
+++ b/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/commands/executor/key/RenameDUnitTest.java
@@ -89,7 +89,7 @@ public class RenameDUnitTest {
 
     int redisServerPort1 = clusterStartUp.getRedisPort(1);
     jedisCluster =
-        new JedisCluster(new HostAndPort(BIND_ADDRESS, redisServerPort1), REDIS_CLIENT_TIMEOUT);
+        new JedisCluster(new HostAndPort(BIND_ADDRESS, redisServerPort1), REDIS_CLIENT_TIMEOUT, 20);
   }
 
   @Before
diff --git a/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/ZAddIncrOptionDUnitTest.java b/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/ZAddIncrOptionDUnitTest.java
index 1f2180a..776c108 100644
--- a/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/ZAddIncrOptionDUnitTest.java
+++ b/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/ZAddIncrOptionDUnitTest.java
@@ -18,7 +18,7 @@ package org.apache.geode.redis.internal.commands.executor.sortedset;
 import static org.apache.geode.test.dunit.rules.RedisClusterStartupRule.BIND_ADDRESS;
 import static org.apache.geode.test.dunit.rules.RedisClusterStartupRule.REDIS_CLIENT_TIMEOUT;
 import static org.assertj.core.api.Assertions.assertThat;
-import static redis.clients.jedis.BinaryJedisCluster.DEFAULT_MAX_ATTEMPTS;
+import static redis.clients.jedis.JedisCluster.DEFAULT_MAX_ATTEMPTS;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -33,7 +33,7 @@ import org.junit.Test;
 import redis.clients.jedis.HostAndPort;
 import redis.clients.jedis.JedisCluster;
 import redis.clients.jedis.Protocol;
-import redis.clients.jedis.exceptions.JedisClusterMaxAttemptsException;
+import redis.clients.jedis.exceptions.JedisClusterOperationException;
 
 import org.apache.geode.cache.Operation;
 import org.apache.geode.cache.Region;
@@ -156,7 +156,7 @@ public class ZAddIncrOptionDUnitTest {
     long memberSize;
     try {
       memberSize = jedis.zcard(sortedSetKey);
-    } catch (JedisClusterMaxAttemptsException e) {
+    } catch (JedisClusterOperationException e) {
       if (retries < maxRetries) {
         return false;
       }
@@ -188,7 +188,7 @@ public class ZAddIncrOptionDUnitTest {
     for (int i = 0; i < setSize; i++) {
       try {
         doCrashZAddIncr(i);
-      } catch (JedisClusterMaxAttemptsException ignore) {
+      } catch (JedisClusterOperationException ignore) {
         hitJedisClusterIssue2347.set(true);
       }
     }
diff --git a/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/ZRemDUnitTest.java b/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/ZRemDUnitTest.java
index b5de2af..31bf3b6 100644
--- a/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/ZRemDUnitTest.java
+++ b/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/ZRemDUnitTest.java
@@ -31,7 +31,7 @@ import org.junit.Rule;
 import org.junit.Test;
 import redis.clients.jedis.HostAndPort;
 import redis.clients.jedis.JedisCluster;
-import redis.clients.jedis.exceptions.JedisClusterMaxAttemptsException;
+import redis.clients.jedis.exceptions.JedisClusterOperationException;
 
 import org.apache.geode.cache.Operation;
 import org.apache.geode.cache.Region;
@@ -164,7 +164,7 @@ public class ZRemDUnitTest {
     long removed;
     try {
       removed = jedis.zrem(sortedSetKey, map.keySet().toArray(new String[] {}));
-    } catch (JedisClusterMaxAttemptsException e) {
+    } catch (JedisClusterOperationException e) {
       if (retries < maxRetries) {
         return false;
       }
@@ -223,7 +223,7 @@ public class ZRemDUnitTest {
         Double score = jedis.zscore(sortedSetKey, member);
         assertThat(score).isNull();
       }
-    } catch (JedisClusterMaxAttemptsException e) {
+    } catch (JedisClusterOperationException e) {
       return false;
     }
     return true;
diff --git a/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/ZRemRangeByLexDUnitTest.java b/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/ZRemRangeByLexDUnitTest.java
index 0664740..ef9ccd9 100644
--- a/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/ZRemRangeByLexDUnitTest.java
+++ b/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/ZRemRangeByLexDUnitTest.java
@@ -34,7 +34,7 @@ import org.junit.Rule;
 import org.junit.Test;
 import redis.clients.jedis.HostAndPort;
 import redis.clients.jedis.JedisCluster;
-import redis.clients.jedis.exceptions.JedisClusterMaxAttemptsException;
+import redis.clients.jedis.exceptions.JedisClusterOperationException;
 
 import org.apache.geode.cache.Operation;
 import org.apache.geode.cache.Region;
@@ -225,7 +225,7 @@ public class ZRemRangeByLexDUnitTest {
     long removed;
     try {
       removed = jedis.zremrangeByLex(KEY, "[v", "[w");
-    } catch (JedisClusterMaxAttemptsException e) {
+    } catch (JedisClusterOperationException e) {
       if (retries < maxRetries) {
         return false;
       }
@@ -269,7 +269,7 @@ public class ZRemRangeByLexDUnitTest {
         Double score = jedis.zscore(KEY, member);
         assertThat(score).isNull();
       }
-    } catch (JedisClusterMaxAttemptsException e) {
+    } catch (JedisClusterOperationException e) {
       return false;
     }
     return true;
diff --git a/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/ZRemRangeByRankDUnitTest.java b/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/ZRemRangeByRankDUnitTest.java
index a3b3026..03567d5 100644
--- a/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/ZRemRangeByRankDUnitTest.java
+++ b/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/ZRemRangeByRankDUnitTest.java
@@ -14,6 +14,7 @@
  */
 package org.apache.geode.redis.internal.commands.executor.sortedset;
 
+import static org.apache.geode.distributed.ConfigurationProperties.GEODE_FOR_REDIS_PORT;
 import static org.apache.geode.test.awaitility.GeodeAwaitility.await;
 import static org.apache.geode.test.dunit.rules.RedisClusterStartupRule.BIND_ADDRESS;
 import static org.apache.geode.test.dunit.rules.RedisClusterStartupRule.REDIS_CLIENT_TIMEOUT;
@@ -33,9 +34,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import redis.clients.jedis.HostAndPort;
 import redis.clients.jedis.JedisCluster;
-import redis.clients.jedis.exceptions.JedisClusterMaxAttemptsException;
+import redis.clients.jedis.exceptions.JedisClusterOperationException;
 
 import org.apache.geode.cache.Operation;
+import org.apache.geode.internal.AvailablePortHelper;
 import org.apache.geode.internal.cache.PartitionedRegion;
 import org.apache.geode.internal.cache.PartitionedRegionHelper;
 import org.apache.geode.redis.ConcurrentLoopingThreads;
@@ -64,9 +66,19 @@ public class ZRemRangeByRankDUnitTest {
   public void setup() {
     MemberVM locator = clusterStartUp.startLocatorVM(0);
     int locatorPort = locator.getPort();
-    MemberVM server1 = clusterStartUp.startRedisVM(1, locatorPort);
-    MemberVM server2 = clusterStartUp.startRedisVM(2, locatorPort);
-    MemberVM server3 = clusterStartUp.startRedisVM(3, locatorPort);
+
+    int[] serverPorts = AvailablePortHelper.getRandomAvailableTCPPorts(3);
+
+    MemberVM server1 = clusterStartUp.startRedisVM(1, x -> x
+        .withProperty(GEODE_FOR_REDIS_PORT, Integer.toString(serverPorts[0]))
+        .withConnectionToLocator(locatorPort));
+    MemberVM server2 = clusterStartUp.startRedisVM(2, x -> x
+        .withProperty(GEODE_FOR_REDIS_PORT, Integer.toString(serverPorts[1]))
+        .withConnectionToLocator(locatorPort));
+    MemberVM server3 = clusterStartUp.startRedisVM(3, x -> x
+        .withProperty(GEODE_FOR_REDIS_PORT, Integer.toString(serverPorts[2]))
+        .withConnectionToLocator(locatorPort));
+
     servers = new ArrayList<>();
     servers.add(server1);
     servers.add(server2);
@@ -162,7 +174,7 @@ public class ZRemRangeByRankDUnitTest {
         Double score = jedis.zscore(KEY, member);
         assertThat(score).isNull();
       }
-    } catch (JedisClusterMaxAttemptsException e) {
+    } catch (JedisClusterOperationException e) {
       return false;
     }
     return true;
@@ -191,7 +203,7 @@ public class ZRemRangeByRankDUnitTest {
     long removed;
     try {
       removed = jedis.zremrangeByRank(KEY, 0, -1);
-    } catch (JedisClusterMaxAttemptsException e) {
+    } catch (JedisClusterOperationException e) {
       if (retries < maxRetries) {
         return false;
       }
diff --git a/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/ZRemRangeByScoreDUnitTest.java b/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/ZRemRangeByScoreDUnitTest.java
index 9fca465..2e35bf0 100644
--- a/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/ZRemRangeByScoreDUnitTest.java
+++ b/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/ZRemRangeByScoreDUnitTest.java
@@ -36,7 +36,7 @@ import org.junit.Rule;
 import org.junit.Test;
 import redis.clients.jedis.HostAndPort;
 import redis.clients.jedis.JedisCluster;
-import redis.clients.jedis.exceptions.JedisClusterMaxAttemptsException;
+import redis.clients.jedis.exceptions.JedisClusterOperationException;
 
 import org.apache.geode.cache.Operation;
 import org.apache.geode.internal.AvailablePortHelper;
@@ -197,7 +197,7 @@ public class ZRemRangeByScoreDUnitTest {
         Double score = jedis.zscore(KEY, member);
         assertThat(score).isNull();
       }
-    } catch (JedisClusterMaxAttemptsException e) {
+    } catch (JedisClusterOperationException e) {
       return false;
     }
     return true;
@@ -244,7 +244,7 @@ public class ZRemRangeByScoreDUnitTest {
     long removed;
     try {
       removed = jedis.zremrangeByScore(KEY, "-inf", "+inf");
-    } catch (JedisClusterMaxAttemptsException e) {
+    } catch (JedisClusterOperationException e) {
       if (retries < maxRetries) {
         return false;
       }
diff --git a/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/executor/auth/AuthWhileServersRestartDUnitTest.java b/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/executor/auth/AuthWhileServersRestartDUnitTest.java
index 22f3c1e..6c625d5 100644
--- a/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/executor/auth/AuthWhileServersRestartDUnitTest.java
+++ b/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/executor/auth/AuthWhileServersRestartDUnitTest.java
@@ -18,7 +18,7 @@ package org.apache.geode.redis.internal.executor.auth;
 import static org.apache.geode.distributed.ConfigurationProperties.GEODE_FOR_REDIS_PORT;
 import static org.apache.geode.test.dunit.rules.RedisClusterStartupRule.BIND_ADDRESS;
 import static org.apache.geode.test.dunit.rules.RedisClusterStartupRule.REDIS_CLIENT_TIMEOUT;
-import static redis.clients.jedis.BinaryJedisCluster.DEFAULT_MAX_ATTEMPTS;
+import static redis.clients.jedis.JedisCluster.DEFAULT_MAX_ATTEMPTS;
 
 import java.util.concurrent.Future;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -59,7 +59,7 @@ public class AuthWhileServersRestartDUnitTest {
   public static void classSetup() {
     MemberVM locator = clusterStartUp.startLocatorVM(0,
         x -> x.withSecurityManager(SimpleSecurityManager.class));
-    int locatorPort = locator.getPort();
+    final int locatorPort = locator.getPort();
 
     SerializableFunction<ServerStarterRule> serverOperator = s -> s
         .withCredential("cluster", "cluster")
@@ -72,7 +72,8 @@ public class AuthWhileServersRestartDUnitTest {
     String finalRedisPort = Integer.toString(server3Port);
 
     operatorForVM3 = serverOperator.compose(o -> o
-        .withProperty(GEODE_FOR_REDIS_PORT, finalRedisPort));
+        .withProperty(GEODE_FOR_REDIS_PORT, finalRedisPort)
+        .withConnectionToLocator(locatorPort));
 
     clusterStartUp.startRedisVM(3, operatorForVM3);
 
diff --git a/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/executor/string/StringsKillMultipleServersDUnitTest.java b/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/executor/string/StringsKillMultipleServersDUnitTest.java
index 9d0a1a7..045c841 100644
--- a/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/executor/string/StringsKillMultipleServersDUnitTest.java
+++ b/geode-for-redis/src/distributedTest/java/org/apache/geode/redis/internal/executor/string/StringsKillMultipleServersDUnitTest.java
@@ -56,7 +56,7 @@ public class StringsKillMultipleServersDUnitTest {
 
     int redisServerPort1 = cluster.getRedisPort(1);
     jedisCluster =
-        new JedisCluster(new HostAndPort(BIND_ADDRESS, redisServerPort1), 10_000);
+        new JedisCluster(new HostAndPort(BIND_ADDRESS, redisServerPort1), 10_000, 20);
 
     // This sequence ensures that servers 1, 2 and 3 are hosting all the buckets and server 4
     // has no buckets.
@@ -99,7 +99,12 @@ public class StringsKillMultipleServersDUnitTest {
   private Void doSetOps(AtomicBoolean running, AtomicInteger counter) {
     while (running.get()) {
       int i = counter.getAndIncrement();
-      jedisCluster.set("key-" + i, "value-" + i);
+      try {
+        jedisCluster.set("key-" + i, "value-" + i);
+      } catch (final Throwable t) {
+        t.printStackTrace();
+        throw t;
+      }
     }
     return null;
   }
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/AbstractCommandPipeliningIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/AbstractCommandPipeliningIntegrationTest.java
index 4762311..92b473f 100644
--- a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/AbstractCommandPipeliningIntegrationTest.java
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/AbstractCommandPipeliningIntegrationTest.java
@@ -92,12 +92,16 @@ public abstract class AbstractCommandPipeliningIntegrationTest implements RedisI
     int numberOfPipeLineRequests = 1000;
 
     do {
-      Pipeline p = jedis.pipelined();
+      // use a unique key for each pipeline for incrementing
+      final String key = "P" + numberOfPipeLineRequests;
+      jedis.set(key, "-1");
+
+      final Pipeline p = jedis.pipelined();
       for (int i = 0; i < NUMBER_OF_COMMANDS_IN_PIPELINE; i++) {
-        p.echo(String.valueOf(i));
+        p.incr(key);
       }
 
-      List<Object> results = p.syncAndReturnAll();
+      final List<Object> results = p.syncAndReturnAll();
 
       verifyResultOrder(NUMBER_OF_COMMANDS_IN_PIPELINE, results);
       numberOfPipeLineRequests--;
@@ -109,8 +113,8 @@ public abstract class AbstractCommandPipeliningIntegrationTest implements RedisI
 
   private void verifyResultOrder(final int numberOfCommandInPipeline, List<Object> results) {
     for (int i = 0; i < numberOfCommandInPipeline; i++) {
-      String expected = String.valueOf(i);
-      String currentVal = (String) results.get(i);
+      final long expected = (long) i;
+      final long currentVal = (long) results.get(i);
 
       assertThat(currentVal).isEqualTo(expected);
     }
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/cluster/AbstractClusterIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/cluster/AbstractClusterIntegrationTest.java
index c55c23d..3eed977 100644
--- a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/cluster/AbstractClusterIntegrationTest.java
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/cluster/AbstractClusterIntegrationTest.java
@@ -49,7 +49,7 @@ public abstract class AbstractClusterIntegrationTest implements RedisIntegration
 
   @Test
   public void testCluster_givenWrongNumberOfArguments() {
-    final Jedis connection = jedis.getConnectionFromSlot(0);
+    final Jedis connection = new Jedis(jedis.getConnectionFromSlot(0));
     assertThatThrownBy(() -> connection.sendCommand(Protocol.Command.CLUSTER))
         .hasMessage("ERR wrong number of arguments for 'cluster' command");
     assertThatThrownBy(
@@ -77,7 +77,7 @@ public abstract class AbstractClusterIntegrationTest implements RedisIntegration
 
   @Test
   public void keyslot_ReturnsCorrectSlot() {
-    final Jedis connection = jedis.getConnectionFromSlot(0);
+    final Jedis connection = new Jedis(jedis.getConnectionFromSlot(0));
     assertThat(connection.clusterKeySlot("nohash")).isEqualTo(9072);
     assertThat(connection.clusterKeySlot("with{hash}")).isEqualTo(238);
     assertThat(connection.clusterKeySlot("with{two}{hashes}")).isEqualTo(2127);
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/cluster/ClusterIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/cluster/ClusterIntegrationTest.java
index bcfe2ac..cfb337b 100644
--- a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/cluster/ClusterIntegrationTest.java
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/cluster/ClusterIntegrationTest.java
@@ -36,7 +36,7 @@ public class ClusterIntegrationTest extends AbstractClusterIntegrationTest {
 
   @Test
   public void errorMessageContainsListOfSupportedSubcommands() {
-    final Jedis connection = jedis.getConnectionFromSlot(0);
+    final Jedis connection = new Jedis(jedis.getConnectionFromSlot(0));
 
     String invalidSubcommand = "subcommand";
     assertThatThrownBy(() -> connection.sendCommand(Protocol.Command.CLUSTER, invalidSubcommand))
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/connection/AbstractEchoIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/connection/AbstractEchoIntegrationTest.java
index ff73905..9aafea0 100644
--- a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/connection/AbstractEchoIntegrationTest.java
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/connection/AbstractEchoIntegrationTest.java
@@ -20,13 +20,13 @@ import static org.apache.geode.redis.RedisCommandArgumentsTestHelper.assertExact
 import static org.apache.geode.test.dunit.rules.RedisClusterStartupRule.BIND_ADDRESS;
 import static org.apache.geode.test.dunit.rules.RedisClusterStartupRule.REDIS_CLIENT_TIMEOUT;
 import static org.assertj.core.api.Assertions.assertThat;
+import static redis.clients.jedis.Protocol.Command.ECHO;
 
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import redis.clients.jedis.HostAndPort;
 import redis.clients.jedis.JedisCluster;
-import redis.clients.jedis.Protocol;
 
 import org.apache.geode.redis.RedisIntegrationTest;
 
@@ -45,12 +45,12 @@ public abstract class AbstractEchoIntegrationTest implements RedisIntegrationTes
 
   @Test
   public void errors_GivenWrongNumberOfArguments() {
-    assertExactNumberOfArgs(jedis, Protocol.Command.ECHO, 1);
+    assertExactNumberOfArgs(jedis, ECHO, 1);
   }
 
   @Test
   public void returnsString_givenString() {
-    String string = "test";
-    assertThat(jedis.echo(string)).isEqualTo(string);
+    final byte[] bytes = "test".getBytes();
+    assertThat((byte[]) jedis.sendCommand(ECHO, bytes)).isEqualTo(bytes);
   }
 }
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/hash/AbstractHScanIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/hash/AbstractHScanIntegrationTest.java
index 7b77231..f0aa0e1 100755
--- a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/hash/AbstractHScanIntegrationTest.java
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/hash/AbstractHScanIntegrationTest.java
@@ -43,8 +43,8 @@ import redis.clients.jedis.HostAndPort;
 import redis.clients.jedis.Jedis;
 import redis.clients.jedis.JedisCluster;
 import redis.clients.jedis.Protocol;
-import redis.clients.jedis.ScanParams;
-import redis.clients.jedis.ScanResult;
+import redis.clients.jedis.params.ScanParams;
+import redis.clients.jedis.resps.ScanResult;
 
 import org.apache.geode.redis.ConcurrentLoopingThreads;
 import org.apache.geode.redis.RedisIntegrationTest;
@@ -477,8 +477,8 @@ public abstract class AbstractHScanIntegrationTest implements RedisIntegrationTe
     jedis.hset(HASH_KEY, initialHashData);
     final int iterationCount = 500;
 
-    Jedis jedis1 = jedis.getConnectionFromSlot(SLOT_FOR_KEY);
-    Jedis jedis2 = jedis.getConnectionFromSlot(SLOT_FOR_KEY);
+    final Jedis jedis1 = new Jedis(jedis.getConnectionFromSlot(SLOT_FOR_KEY));
+    final Jedis jedis2 = new Jedis(jedis.getConnectionFromSlot(SLOT_FOR_KEY));
 
     new ConcurrentLoopingThreads(iterationCount,
         (i) -> multipleHScanAndAssertOnSizeOfResultSet(jedis1, initialHashData),
@@ -498,8 +498,8 @@ public abstract class AbstractHScanIntegrationTest implements RedisIntegrationTe
     jedis.hset(HASH_KEY, initialHashData);
     final int iterationCount = 500;
 
-    Jedis jedis1 = jedis.getConnectionFromSlot(SLOT_FOR_KEY);
-    Jedis jedis2 = jedis.getConnectionFromSlot(SLOT_FOR_KEY);
+    final Jedis jedis1 = new Jedis(jedis.getConnectionFromSlot(SLOT_FOR_KEY));
+    final Jedis jedis2 = new Jedis(jedis.getConnectionFromSlot(SLOT_FOR_KEY));
 
     new ConcurrentLoopingThreads(iterationCount,
         (i) -> multipleHScanAndAssertOnContentOfResultSet(i, jedis1, initialHashData),
@@ -520,8 +520,8 @@ public abstract class AbstractHScanIntegrationTest implements RedisIntegrationTe
     jedis.hset(HASH_KEY, initialHashData);
     final int iterationCount = 500;
 
-    Jedis jedis1 = jedis.getConnectionFromSlot(SLOT_FOR_KEY);
-    Jedis jedis2 = jedis.getConnectionFromSlot(SLOT_FOR_KEY);
+    final Jedis jedis1 = new Jedis(jedis.getConnectionFromSlot(SLOT_FOR_KEY));
+    final Jedis jedis2 = new Jedis(jedis.getConnectionFromSlot(SLOT_FOR_KEY));
 
     new ConcurrentLoopingThreads(iterationCount,
         (i) -> multipleHScanAndAssertOnContentOfResultSet(i, jedis1, initialHashData),
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/hash/AbstractHashesIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/hash/AbstractHashesIntegrationTest.java
index 42f71b3..c5ec2c7 100755
--- a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/hash/AbstractHashesIntegrationTest.java
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/hash/AbstractHashesIntegrationTest.java
@@ -38,8 +38,8 @@ import org.junit.Test;
 import redis.clients.jedis.HostAndPort;
 import redis.clients.jedis.JedisCluster;
 import redis.clients.jedis.Protocol;
-import redis.clients.jedis.ScanResult;
 import redis.clients.jedis.exceptions.JedisDataException;
+import redis.clients.jedis.resps.ScanResult;
 
 import org.apache.geode.redis.ConcurrentLoopingThreads;
 import org.apache.geode.redis.RedisIntegrationTest;
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/key/AbstractExistsIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/key/AbstractExistsIntegrationTest.java
index 8dfe5d7..49e3de9 100644
--- a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/key/AbstractExistsIntegrationTest.java
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/key/AbstractExistsIntegrationTest.java
@@ -125,9 +125,8 @@ public abstract class AbstractExistsIntegrationTest implements RedisIntegrationT
   public void shouldReturn1_givenBitMapExists() {
     String bitMapKey = "bitMapKey";
     long offset = 1L;
-    String bitMapValue = "0";
 
-    jedis.setbit(bitMapKey, offset, bitMapValue);
+    jedis.setbit(bitMapKey, offset, false);
 
     assertThat(jedis.exists(toArray(bitMapKey))).isEqualTo(1L);
   }
@@ -136,9 +135,8 @@ public abstract class AbstractExistsIntegrationTest implements RedisIntegrationT
   public void shouldReturn0_givenBitMapDoesNotExist() {
     String bitMapKey = "bitMapKey";
     long offset = 1L;
-    String bitMapValue = "0";
 
-    jedis.setbit(bitMapKey, offset, bitMapValue);
+    jedis.setbit(bitMapKey, offset, false);
     jedis.del(bitMapKey);
 
     assertThat(jedis.exists(toArray(bitMapKey))).isEqualTo(0L);
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/key/AbstractExpireIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/key/AbstractExpireIntegrationTest.java
index e486ec9..bf85e6e 100644
--- a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/key/AbstractExpireIntegrationTest.java
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/key/AbstractExpireIntegrationTest.java
@@ -113,9 +113,8 @@ public abstract class AbstractExpireIntegrationTest implements RedisIntegrationT
 
     String key = "key";
     long offset = 1L;
-    String value = "0";
 
-    jedis.setbit(key, offset, value);
+    jedis.setbit(key, offset, false);
 
     Long timeToLive = jedis.ttl(key);
     assertThat(timeToLive).isEqualTo(-1);
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/key/AbstractPersistIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/key/AbstractPersistIntegrationTest.java
index 1e3a012..802d927 100644
--- a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/key/AbstractPersistIntegrationTest.java
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/key/AbstractPersistIntegrationTest.java
@@ -96,9 +96,8 @@ public abstract class AbstractPersistIntegrationTest implements RedisIntegration
   public void shouldPersistKey_givenKeyWith_bitMapValue() {
     String bitMapKey = "bitMapKey";
     long offset = 1L;
-    String bitMapValue = "0";
 
-    jedis.setbit(bitMapKey, offset, bitMapValue);
+    jedis.setbit(bitMapKey, offset, false);
     jedis.expire(bitMapKey, 20L);
 
     assertThat(jedis.persist(bitMapKey)).isEqualTo(1L);
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/key/AbstractScanIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/key/AbstractScanIntegrationTest.java
index f53b403..aede621 100644
--- a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/key/AbstractScanIntegrationTest.java
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/key/AbstractScanIntegrationTest.java
@@ -31,8 +31,8 @@ import org.junit.Test;
 import redis.clients.jedis.HostAndPort;
 import redis.clients.jedis.JedisCluster;
 import redis.clients.jedis.Protocol;
-import redis.clients.jedis.ScanParams;
-import redis.clients.jedis.ScanResult;
+import redis.clients.jedis.params.ScanParams;
+import redis.clients.jedis.resps.ScanResult;
 
 import org.apache.geode.redis.RedisIntegrationTest;
 import org.apache.geode.test.awaitility.GeodeAwaitility;
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/key/ScanIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/key/ScanIntegrationTest.java
index 203f0d5..a860e01 100644
--- a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/key/ScanIntegrationTest.java
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/key/ScanIntegrationTest.java
@@ -22,8 +22,8 @@ import java.util.List;
 
 import org.junit.ClassRule;
 import org.junit.Test;
-import redis.clients.jedis.ScanParams;
-import redis.clients.jedis.ScanResult;
+import redis.clients.jedis.params.ScanParams;
+import redis.clients.jedis.resps.ScanResult;
 
 import org.apache.geode.redis.GeodeRedisServerRule;
 
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/pubsub/AbstractSubCommandsIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/pubsub/AbstractSubCommandsIntegrationTest.java
index 5de10e1..0e02dbf 100644
--- a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/pubsub/AbstractSubCommandsIntegrationTest.java
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/pubsub/AbstractSubCommandsIntegrationTest.java
@@ -25,9 +25,10 @@ import static org.apache.geode.test.dunit.rules.RedisClusterStartupRule.BIND_ADD
 import static org.apache.geode.util.internal.UncheckedUtils.uncheckedCast;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import static redis.clients.jedis.Protocol.PUBSUB_CHANNELS;
-import static redis.clients.jedis.Protocol.PUBSUB_NUMSUB;
-import static redis.clients.jedis.Protocol.PUBSUB_NUM_PAT;
+import static redis.clients.jedis.Protocol.Command.PUBSUB;
+import static redis.clients.jedis.Protocol.Keyword.CHANNELS;
+import static redis.clients.jedis.Protocol.Keyword.NUMPAT;
+import static redis.clients.jedis.Protocol.Keyword.NUMSUB;
 
 import java.net.SocketException;
 import java.util.ArrayList;
@@ -39,7 +40,6 @@ import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Test;
 import redis.clients.jedis.Jedis;
-import redis.clients.jedis.Protocol;
 
 import org.apache.geode.redis.RedisIntegrationTest;
 import org.apache.geode.redis.mocks.MockSubscriber;
@@ -64,14 +64,14 @@ public abstract class AbstractSubCommandsIntegrationTest implements RedisIntegra
 
   @Test
   public void pubsub_shouldError_givenTooFewArguments() {
-    assertAtLeastNArgs(introspector, Protocol.Command.PUBSUB, 1);
+    assertAtLeastNArgs(introspector, PUBSUB, 1);
   }
 
   @Test
   public void pubsub_shouldReturnError_givenUnknownSubcommand() {
     String expected = String.format(ERROR_UNKNOWN_PUBSUB_SUBCOMMAND, "nonesuch");
 
-    assertThatThrownBy(() -> introspector.sendCommand(Protocol.Command.PUBSUB, "nonesuch"))
+    assertThatThrownBy(() -> introspector.sendCommand(PUBSUB, "nonesuch"))
         .hasMessageContaining(expected);
   }
 
@@ -80,8 +80,8 @@ public abstract class AbstractSubCommandsIntegrationTest implements RedisIntegra
   @Test
   public void channels_shouldError_givenTooManyArguments() {
     assertAtMostNArgsForSubCommand(introspector,
-        Protocol.Command.PUBSUB,
-        PUBSUB_CHANNELS.getBytes(),
+        PUBSUB,
+        CHANNELS.getRaw(),
         1);
   }
 
@@ -95,7 +95,7 @@ public abstract class AbstractSubCommandsIntegrationTest implements RedisIntegra
     waitFor(() -> mockSubscriber.getSubscribedChannels() == 2);
 
     List<byte[]> result =
-        uncheckedCast(introspector.sendCommand(Protocol.Command.PUBSUB, "cHaNNEls"));
+        uncheckedCast(introspector.sendCommand(PUBSUB, "cHaNNEls"));
 
     assertThat(result).containsExactlyInAnyOrderElementsOf(expectedChannels);
 
@@ -111,8 +111,8 @@ public abstract class AbstractSubCommandsIntegrationTest implements RedisIntegra
     executor.submit(() -> subscriber.subscribe(mockSubscriber, "foo", "bar"));
     waitFor(() -> mockSubscriber.getSubscribedChannels() == 2);
 
-    List<byte[]> result =
-        uncheckedCast(introspector.sendCommand(Protocol.Command.PUBSUB, PUBSUB_CHANNELS));
+    final List<byte[]> result =
+        uncheckedCast(introspector.sendCommand(PUBSUB, CHANNELS.toString()));
 
     assertThat(result).containsExactlyInAnyOrderElementsOf(expectedChannels);
 
@@ -124,7 +124,7 @@ public abstract class AbstractSubCommandsIntegrationTest implements RedisIntegra
     executor.submit(() -> subscriber.psubscribe(mockSubscriber, "f*"));
     waitFor(() -> mockSubscriber.getSubscribedChannels() == 1);
 
-    List<String> result = introspector.pubsubChannels("f*");
+    final List<String> result = introspector.pubsubChannels("f*");
 
     assertThat(result).isEmpty();
 
@@ -140,7 +140,7 @@ public abstract class AbstractSubCommandsIntegrationTest implements RedisIntegra
     executor.submit(() -> subscriber.subscribe(mockSubscriber, "foo", "bar"));
     waitFor(() -> mockSubscriber.getSubscribedChannels() == 2);
 
-    List<String> result = introspector.pubsubChannels("fo*");
+    final List<String> result = introspector.pubsubChannels("fo*");
 
     assertThat(result).containsExactlyInAnyOrderElementsOf(expectedChannels);
 
@@ -149,7 +149,7 @@ public abstract class AbstractSubCommandsIntegrationTest implements RedisIntegra
 
   @Test
   public void channels_should_returnEmptyArray_givenPatternWithNoMatches() {
-    List<String> result = introspector.pubsubChannels("fo*");
+    final List<String> result = introspector.pubsubChannels("fo*");
 
     assertThat(result).isEmpty();
   }
@@ -164,8 +164,8 @@ public abstract class AbstractSubCommandsIntegrationTest implements RedisIntegra
     mockSubscriber.unsubscribe("foo");
     waitFor(() -> mockSubscriber.getSubscribedChannels() == 1);
 
-    List<byte[]> result =
-        uncheckedCast(introspector.sendCommand(Protocol.Command.PUBSUB, PUBSUB_CHANNELS));
+    final List<byte[]> result =
+        uncheckedCast(introspector.sendCommand(PUBSUB, CHANNELS.toString()));
 
     assertThat(result).containsExactlyInAnyOrderElementsOf(expectedChannels);
 
@@ -186,8 +186,8 @@ public abstract class AbstractSubCommandsIntegrationTest implements RedisIntegra
     waitFor(() -> (mockSubscriber.getSubscribedChannels() == 1)
         && (mockSubscriber2.getSubscribedChannels() == 1));
 
-    List<byte[]> result =
-        uncheckedCast(introspector.sendCommand(Protocol.Command.PUBSUB, PUBSUB_CHANNELS));
+    final List<byte[]> result =
+        uncheckedCast(introspector.sendCommand(PUBSUB, CHANNELS.toString()));
 
     assertThat(result).containsExactlyInAnyOrderElementsOf(expectedChannels);
     assertThat(result.size()).isEqualTo(1);
@@ -204,8 +204,8 @@ public abstract class AbstractSubCommandsIntegrationTest implements RedisIntegra
     executor.submit(() -> subscriber.subscribe(mockSubscriber, "foo"));
     waitFor(() -> mockSubscriber.getSubscribedChannels() == 1);
 
-    List<Object> result =
-        uncheckedCast(introspector.sendCommand(Protocol.Command.PUBSUB, PUBSUB_NUMSUB));
+    final List<Object> result =
+        uncheckedCast(introspector.sendCommand(PUBSUB, NUMSUB.toString()));
 
     assertThat(result).isEmpty();
 
@@ -222,12 +222,12 @@ public abstract class AbstractSubCommandsIntegrationTest implements RedisIntegra
     waitFor(() -> mockSubscriber.getSubscribedChannels() == 1
         && fooAndBarSubscriber.getSubscribedChannels() == 2);
 
-    Map<String, String> result = introspector.pubsubNumSub("foo", "bar");
+    final Map<String, Long> result = introspector.pubsubNumSub("foo", "bar");
 
     assertThat(result.containsKey("foo")).isTrue();
     assertThat(result.containsKey("bar")).isTrue();
-    assertThat(result.get("foo")).isEqualTo("2");
-    assertThat(result.get("bar")).isEqualTo("1");
+    assertThat(result.get("foo")).isEqualTo(2L);
+    assertThat(result.get("bar")).isEqualTo(1L);
 
     unsubscribeWithSuccess(mockSubscriber);
     unsubscribeWithSuccess(fooAndBarSubscriber);
@@ -239,10 +239,10 @@ public abstract class AbstractSubCommandsIntegrationTest implements RedisIntegra
     executor.submit(() -> subscriber.subscribe(mockSubscriber, "foo"));
     waitFor(() -> mockSubscriber.getSubscribedChannels() == 1);
 
-    Map<String, String> result = introspector.pubsubNumSub("bar");
+    final Map<String, Long> result = introspector.pubsubNumSub("bar");
 
     assertThat(result.containsKey("bar")).isTrue();
-    assertThat(result.get("bar")).isEqualTo("0");
+    assertThat(result.get("bar")).isEqualTo(0L);
 
     unsubscribeWithSuccess(mockSubscriber);
   }
@@ -252,10 +252,10 @@ public abstract class AbstractSubCommandsIntegrationTest implements RedisIntegra
     executor.submit(() -> subscriber.psubscribe(mockSubscriber, "f*"));
     waitFor(() -> mockSubscriber.getSubscribedChannels() == 1);
 
-    Map<String, String> result = introspector.pubsubNumSub("f*");
+    final Map<String, Long> result = introspector.pubsubNumSub("f*");
 
     assertThat(result.containsKey("f*")).isTrue();
-    assertThat(result.get("f*")).isEqualTo("0");
+    assertThat(result.get("f*")).isEqualTo(0L);
 
     punsubscribeWithSuccess(mockSubscriber);
   }
@@ -270,17 +270,17 @@ public abstract class AbstractSubCommandsIntegrationTest implements RedisIntegra
     executor.submit(() -> subscriber2.subscribe(fooSubscriber, "foo"));
     waitFor(() -> fooSubscriber.getSubscribedChannels() == 1);
 
-    Map<String, String> result = introspector.pubsubNumSub("f*");
+    Map<String, Long> result = introspector.pubsubNumSub("f*");
 
     assertThat(result.containsKey("foo")).isFalse();
     assertThat(result.containsKey("f*")).isTrue();
-    assertThat(result.get("f*")).isEqualTo("0");
+    assertThat(result.get("f*")).isEqualTo(0L);
 
     result = introspector.pubsubNumSub("foo");
 
     assertThat(result.containsKey("foo")).isTrue();
     assertThat(result.containsKey("f*")).isFalse();
-    assertThat(result.get("foo")).isEqualTo("1");
+    assertThat(result.get("foo")).isEqualTo(1L);
 
     punsubscribeWithSuccess(mockSubscriber);
     unsubscribeWithSuccess(fooSubscriber);
@@ -293,8 +293,8 @@ public abstract class AbstractSubCommandsIntegrationTest implements RedisIntegra
   @Test
   public void numpat_shouldError_givenTooManyArguments() {
     assertAtMostNArgsForSubCommand(introspector,
-        Protocol.Command.PUBSUB,
-        PUBSUB_NUM_PAT.getBytes(),
+        PUBSUB,
+        NUMPAT.getRaw(),
         0);
   }
 
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/pubsub/AbstractSubscriptionsIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/pubsub/AbstractSubscriptionsIntegrationTest.java
index d614c5c..3dfe92e 100644
--- a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/pubsub/AbstractSubscriptionsIntegrationTest.java
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/pubsub/AbstractSubscriptionsIntegrationTest.java
@@ -74,12 +74,8 @@ public abstract class AbstractSubscriptionsIntegrationTest implements RedisInteg
     executor.submit(() -> client.subscribe(mockSubscriber, "same"));
     mockSubscriber.awaitSubscribe("same");
     mockSubscriber.ping("potato");
-    // JedisPubSub PING with message is not currently possible, will submit a PR
-    // (https://github.com/xetorthio/jedis/issues/2049)
-    // until then, we have to call this second ping to flush the client
-    mockSubscriber.ping();
     GeodeAwaitility.await()
-        .untilAsserted(() -> assertThat(mockSubscriber.getReceivedPings().size()).isEqualTo(2));
+        .untilAsserted(() -> assertThat(mockSubscriber.getReceivedPings().size()).isOne());
     assertThat(mockSubscriber.getReceivedPings().get(0)).isEqualTo("potato");
     mockSubscriber.unsubscribe();
   }
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/server/AbstractHitsMissesIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/server/AbstractHitsMissesIntegrationTest.java
index 16cdc3b..1305655 100644
--- a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/server/AbstractHitsMissesIntegrationTest.java
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/server/AbstractHitsMissesIntegrationTest.java
@@ -26,8 +26,8 @@ import java.util.function.Consumer;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-import redis.clients.jedis.BitOP;
 import redis.clients.jedis.Jedis;
+import redis.clients.jedis.args.BitOP;
 
 import org.apache.geode.redis.RedisIntegrationTest;
 import org.apache.geode.redis.RedisTestHelper;
@@ -569,7 +569,7 @@ public abstract class AbstractHitsMissesIntegrationTest implements RedisIntegrat
 
   @Test
   public void testSetbit() {
-    runCommandAndAssertNoStatUpdates(STRING_INT_KEY, k -> jedis.setbit(k, 0L, "1"));
+    runCommandAndAssertNoStatUpdates(STRING_INT_KEY, k -> jedis.setbit(k, 0L, true));
   }
 
   /************* List related commands *************/
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/server/AbstractInfoIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/server/AbstractInfoIntegrationTest.java
index 220ab54..39d8263 100644
--- a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/server/AbstractInfoIntegrationTest.java
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/server/AbstractInfoIntegrationTest.java
@@ -121,7 +121,7 @@ public abstract class AbstractInfoIntegrationTest implements RedisIntegrationTes
   @Before
   public void setUp() {
     jedisCluster = new JedisCluster(new HostAndPort(BIND_ADDRESS, getPort()), REDIS_CLIENT_TIMEOUT);
-    jedis = jedisCluster.getConnectionFromSlot(new RedisKey(KEY.getBytes()).getSlot());
+    jedis = new Jedis(jedisCluster.getConnectionFromSlot(new RedisKey(KEY.getBytes()).getSlot()));
   }
 
   @After
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/server/AbstractSlowlogIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/server/AbstractSlowlogIntegrationTest.java
index 429bffe..dae5c00 100644
--- a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/server/AbstractSlowlogIntegrationTest.java
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/server/AbstractSlowlogIntegrationTest.java
@@ -25,7 +25,7 @@ import org.junit.Before;
 import org.junit.Test;
 import redis.clients.jedis.Jedis;
 import redis.clients.jedis.Protocol;
-import redis.clients.jedis.util.Slowlog;
+import redis.clients.jedis.resps.Slowlog;
 
 import org.apache.geode.redis.RedisIntegrationTest;
 import org.apache.geode.test.awaitility.GeodeAwaitility;
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/server/ShutdownIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/server/ShutdownIntegrationTest.java
index 1108f4b..c5fdbdd 100644
--- a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/server/ShutdownIntegrationTest.java
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/server/ShutdownIntegrationTest.java
@@ -16,13 +16,16 @@
 
 package org.apache.geode.redis.internal.commands.executor.server;
 
+import static org.apache.geode.redis.internal.RedisConstants.ERROR_UNKNOWN_COMMAND;
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import redis.clients.jedis.Jedis;
+import redis.clients.jedis.exceptions.JedisDataException;
 
 import org.apache.geode.redis.GeodeRedisServerRule;
 import org.apache.geode.redis.RedisIntegrationTest;
@@ -53,10 +56,13 @@ public class ShutdownIntegrationTest implements RedisIntegrationTest {
 
   @Test
   public void shutdownIsDisabled_whenOnlySupportedCommandsAreAllowed() {
-    // Unfortunately Jedis' shutdown() doesn't seem to throw a JedisDataException when the command
-    // returns an error.
-    jedis.shutdown();
+    final String EXPECTED_ERROR_MSG =
+        String.format("ERR " + ERROR_UNKNOWN_COMMAND, "SHUTDOWN", "");
 
+    assertThatThrownBy(
+        () -> jedis.shutdown())
+            .isInstanceOf(JedisDataException.class)
+            .hasMessage(EXPECTED_ERROR_MSG);
     assertThat(jedis.keys("*")).isEmpty();
   }
 }
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/set/AbstractSScanIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/set/AbstractSScanIntegrationTest.java
index 2e6adda..5040745 100755
--- a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/set/AbstractSScanIntegrationTest.java
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/set/AbstractSScanIntegrationTest.java
@@ -36,8 +36,8 @@ import redis.clients.jedis.HostAndPort;
 import redis.clients.jedis.Jedis;
 import redis.clients.jedis.JedisCluster;
 import redis.clients.jedis.Protocol;
-import redis.clients.jedis.ScanParams;
-import redis.clients.jedis.ScanResult;
+import redis.clients.jedis.params.ScanParams;
+import redis.clients.jedis.resps.ScanResult;
 
 import org.apache.geode.redis.ConcurrentLoopingThreads;
 import org.apache.geode.redis.RedisIntegrationTest;
@@ -381,8 +381,8 @@ public abstract class AbstractSScanIntegrationTest implements RedisIntegrationTe
   public void should_returnAllConsistentlyPresentMembers_givenConcurrentThreadsAddingAndRemovingMembers() {
     final Set<String> initialMemberData = initializeThousandMemberSet();
     final int iterationCount = 500;
-    Jedis jedis1 = jedis.getConnectionFromSlot(SLOT_FOR_KEY);
-    Jedis jedis2 = jedis.getConnectionFromSlot(SLOT_FOR_KEY);
+    final Jedis jedis1 = new Jedis(jedis.getConnectionFromSlot(SLOT_FOR_KEY));
+    final Jedis jedis2 = new Jedis(jedis.getConnectionFromSlot(SLOT_FOR_KEY));
 
     new ConcurrentLoopingThreads(iterationCount,
         (i) -> multipleSScanAndAssertOnContentOfResultSet(i, jedis1, initialMemberData),
@@ -402,8 +402,8 @@ public abstract class AbstractSScanIntegrationTest implements RedisIntegrationTe
     final Set<String> initialMemberData = initializeThousandMemberSet();
     jedis.sadd(KEY, initialMemberData.toArray(new String[0]));
     final int iterationCount = 500;
-    Jedis jedis1 = jedis.getConnectionFromSlot(SLOT_FOR_KEY);
-    Jedis jedis2 = jedis.getConnectionFromSlot(SLOT_FOR_KEY);
+    Jedis jedis1 = new Jedis(jedis.getConnectionFromSlot(SLOT_FOR_KEY));
+    Jedis jedis2 = new Jedis(jedis.getConnectionFromSlot(SLOT_FOR_KEY));
 
     new ConcurrentLoopingThreads(iterationCount,
         (i) -> multipleSScanAndAssertOnContentOfResultSet(i, jedis1, initialMemberData),
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZInterStoreIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZInterStoreIntegrationTest.java
index 13e7b7a..a0d900a 100755
--- a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZInterStoreIntegrationTest.java
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZInterStoreIntegrationTest.java
@@ -22,13 +22,13 @@ import static org.apache.geode.test.dunit.rules.RedisClusterStartupRule.REDIS_CL
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
-import java.util.HashSet;
+import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Random;
-import java.util.Set;
 import java.util.function.BiFunction;
 
 import org.assertj.core.data.Offset;
@@ -38,8 +38,8 @@ import org.junit.Test;
 import redis.clients.jedis.HostAndPort;
 import redis.clients.jedis.JedisCluster;
 import redis.clients.jedis.Protocol;
-import redis.clients.jedis.Tuple;
-import redis.clients.jedis.ZParams;
+import redis.clients.jedis.params.ZParams;
+import redis.clients.jedis.resps.Tuple;
 
 import org.apache.geode.redis.ConcurrentLoopingThreads;
 import org.apache.geode.redis.RedisIntegrationTest;
@@ -245,7 +245,7 @@ public abstract class AbstractZInterStoreIntegrationTest implements RedisIntegra
 
   @Test
   public void shouldOverwriteDestinationKey_givenDestinationExists() {
-    Set<Tuple> expectedResults = new LinkedHashSet<>();
+    final List<Tuple> expectedResults = new ArrayList<>();
     expectedResults.add(new Tuple("key1Member", 1.0));
 
     jedis.zadd(NEW_SET, 1.0, "newSetMember1");
@@ -253,48 +253,49 @@ public abstract class AbstractZInterStoreIntegrationTest implements RedisIntegra
     jedis.zadd(KEY1, 1.0, "key1Member");
 
     assertThat(jedis.zinterstore(NEW_SET, KEY1)).isEqualTo(1L);
-    Set<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0L, 1L);
-    assertThat(results).containsExactlyInAnyOrderElementsOf(expectedResults);
+    final List<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0L, 1L);
+    assertThat(results).containsExactlyElementsOf(expectedResults);
   }
 
   @Test
   public void shouldStoreIntersection_givenWeightOfOne_andOneRedisSortedSet() {
     Map<String, Double> scores = buildMapOfMembersAndScores();
-    Set<Tuple> expectedResults = convertToTuples(scores, (ignore, value) -> value);
+    final List<Tuple> expectedResults = convertToTuples(scores, (ignore, value) -> value);
+    expectedResults.sort(Comparator.naturalOrder());
     jedis.zadd(KEY1, scores);
 
     assertThat(jedis.zinterstore(NEW_SET, new ZParams().weights(1), KEY1))
         .isEqualTo(expectedResults.size());
 
-    Set<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, scores.size());
-    assertThat(results).containsExactlyInAnyOrderElementsOf(expectedResults);
+    final List<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, scores.size());
+    assertThat(results).containsExactlyElementsOf(expectedResults);
   }
 
   @Test
   public void shouldStoreIntersection_givenWeightOfZero_andOneRedisSortedSet() {
     Map<String, Double> scores = buildMapOfMembersAndScores();
-    Set<Tuple> expectedResults = convertToTuples(scores, (ignore, value) -> 0D);
+    final List<Tuple> expectedResults = convertToTuples(scores, (ignore, value) -> 0D);
     jedis.zadd(KEY1, scores);
 
     assertThat(jedis.zinterstore(NEW_SET, new ZParams().weights(0), KEY1))
         .isEqualTo(scores.size());
 
-    Set<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, scores.size());
-    assertThat(results).containsExactlyInAnyOrderElementsOf(expectedResults);
+    final List<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, scores.size());
+    assertThat(results).containsExactlyElementsOf(expectedResults);
   }
 
   @Test
   public void shouldStoreIntersection_givenWeightOfPositiveInfinity_andOneRedisSortedSet() {
     Map<String, Double> scores = buildMapOfMembersAndScores();
-    Set<Tuple> expectedResults =
+    final List<Tuple> expectedResults =
         convertToTuples(scores, (ignore, value) -> value > 0 ? Double.POSITIVE_INFINITY : value);
     jedis.zadd(KEY1, scores);
 
     assertThat(jedis.zinterstore(NEW_SET, new ZParams().weights(Double.POSITIVE_INFINITY),
         KEY1)).isEqualTo(scores.size());
 
-    Set<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, scores.size());
-    assertThat(results).containsExactlyInAnyOrderElementsOf(expectedResults);
+    final List<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, scores.size());
+    assertThat(results).containsExactlyElementsOf(expectedResults);
   }
 
   @Test
@@ -302,18 +303,18 @@ public abstract class AbstractZInterStoreIntegrationTest implements RedisIntegra
     Map<String, Double> scores = buildMapOfMembersAndScores();
     jedis.zadd(KEY1, scores);
 
-    Set<Tuple> expectedResults = new LinkedHashSet<>();
-    expectedResults.add(new Tuple("player1", Double.POSITIVE_INFINITY));
-    expectedResults.add(new Tuple("player2", 0D));
+    final List<Tuple> expectedResults = new ArrayList<>();
     expectedResults.add(new Tuple("player3", Double.NEGATIVE_INFINITY));
     expectedResults.add(new Tuple("player4", Double.NEGATIVE_INFINITY));
     expectedResults.add(new Tuple("player5", Double.NEGATIVE_INFINITY));
+    expectedResults.add(new Tuple("player2", 0D));
+    expectedResults.add(new Tuple("player1", Double.POSITIVE_INFINITY));
 
     assertThat(jedis.zinterstore(NEW_SET, new ZParams().weights(Double.NEGATIVE_INFINITY),
         KEY1)).isEqualTo(scores.size());
 
-    Set<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, scores.size());
-    assertThat(results).containsExactlyInAnyOrderElementsOf(expectedResults);
+    final List<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, scores.size());
+    assertThat(results).containsExactlyElementsOf(expectedResults);
   }
 
   @Test
@@ -323,29 +324,29 @@ public abstract class AbstractZInterStoreIntegrationTest implements RedisIntegra
 
     double multiplier = 2.71D;
 
-    Set<Tuple> expectedResults = new LinkedHashSet<>();
+    final List<Tuple> expectedResults = new ArrayList<>();
     expectedResults.add(new Tuple("player1", Double.NEGATIVE_INFINITY));
     expectedResults.add(new Tuple("player2", 0D));
     expectedResults.add(new Tuple("player3", multiplier));
-    expectedResults.add(new Tuple("player4", Double.POSITIVE_INFINITY));
     expectedResults.add(new Tuple("player5", 3.2D * multiplier));
+    expectedResults.add(new Tuple("player4", Double.POSITIVE_INFINITY));
 
     assertThat(jedis.zinterstore(NEW_SET, new ZParams().weights(multiplier), KEY1))
         .isEqualTo(scores.size());
 
-    Set<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, scores.size());
-    assertThat(results).containsExactlyInAnyOrderElementsOf(expectedResults);
+    final List<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, scores.size());
+    assertThat(results).containsExactlyElementsOf(expectedResults);
   }
 
   @Test
   public void shouldStoreIntersection_givenMultipleRedisSortedSets() {
     Map<String, Double> scores = buildMapOfMembersAndScores();
-    Set<Tuple> expectedResults = new LinkedHashSet<>();
+    final List<Tuple> expectedResults = new ArrayList<>();
     expectedResults.add(new Tuple("player1", Double.NEGATIVE_INFINITY));
     expectedResults.add(new Tuple("player2", 0D));
     expectedResults.add(new Tuple("player3", 2D));
-    expectedResults.add(new Tuple("player4", Double.POSITIVE_INFINITY));
     expectedResults.add(new Tuple("player5", 3.2D * 2));
+    expectedResults.add(new Tuple("player4", Double.POSITIVE_INFINITY));
 
     jedis.zadd(KEY1, scores);
     jedis.zadd(KEY2, scores);
@@ -353,19 +354,19 @@ public abstract class AbstractZInterStoreIntegrationTest implements RedisIntegra
     assertThat(jedis.zinterstore(NEW_SET, new ZParams(), KEY1, KEY2))
         .isEqualTo(expectedResults.size());
 
-    Set<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, scores.size());
-    assertThat(results).containsExactlyInAnyOrderElementsOf(expectedResults);
+    final List<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, scores.size());
+    assertThat(results).containsExactlyElementsOf(expectedResults);
   }
 
   @Test
   public void shouldStoreIntersection_givenTwoRedisSortedSets_withDifferentWeights() {
     Map<String, Double> scores = buildMapOfMembersAndScores();
-    Set<Tuple> expectedResults = new LinkedHashSet<>();
+    final List<Tuple> expectedResults = new ArrayList<>();
     expectedResults.add(new Tuple("player1", Double.NEGATIVE_INFINITY));
     expectedResults.add(new Tuple("player2", 0D));
     expectedResults.add(new Tuple("player3", 3D));
-    expectedResults.add(new Tuple("player4", Double.POSITIVE_INFINITY));
     expectedResults.add(new Tuple("player5", 3.2D * 3));
+    expectedResults.add(new Tuple("player4", Double.POSITIVE_INFINITY));
 
     jedis.zadd(KEY1, scores);
     jedis.zadd(KEY2, scores);
@@ -373,14 +374,14 @@ public abstract class AbstractZInterStoreIntegrationTest implements RedisIntegra
     assertThat(jedis.zinterstore(NEW_SET, new ZParams().weights(1, 2), KEY1, KEY2))
         .isEqualTo(expectedResults.size());
 
-    Set<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, scores.size());
-    assertThat(results).containsExactlyInAnyOrderElementsOf(expectedResults);
+    final List<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, scores.size());
+    assertThat(results).containsExactlyElementsOf(expectedResults);
   }
 
   @Test
   public void shouldStoreIntersection_givenMultipleIdenticalRedisSortedSets_withDifferentPositiveWeights() {
     Map<String, Double> scores = buildMapOfMembersAndScores();
-    Set<Tuple> expectedResults = new LinkedHashSet<>();
+    final List<Tuple> expectedResults = new ArrayList<>();
     expectedResults.add(new Tuple("player1", Double.NEGATIVE_INFINITY));
     expectedResults.add(new Tuple("player2", 0D));
     expectedResults.add(new Tuple("player3", 4.5D));
@@ -394,7 +395,7 @@ public abstract class AbstractZInterStoreIntegrationTest implements RedisIntegra
     assertThat(jedis.zinterstore(NEW_SET, new ZParams().weights(1D, 2D, 1.5D), KEY1, KEY2, KEY3))
         .isEqualTo(expectedResults.size());
 
-    Set<Tuple> actualResults = jedis.zrangeWithScores(NEW_SET, 0, scores.size());
+    final List<Tuple> actualResults = jedis.zrangeWithScores(NEW_SET, 0, scores.size());
     assertThatActualScoresAreVeryCloseToExpectedScores(expectedResults, actualResults);
   }
 
@@ -433,12 +434,12 @@ public abstract class AbstractZInterStoreIntegrationTest implements RedisIntegra
     assertThat(jedis.zinterstore(NEW_SET, new ZParams().aggregate(ZParams.Aggregate.SUM),
         KEY1, KEY2, KEY3)).isEqualTo(5);
 
-    Set<Tuple> expected = new HashSet<>();
+    final List<Tuple> expected = new ArrayList<>();
     for (int i = 6; i <= 10; i++) {
       expected.add(tupleSumOfScores("player" + i, scores1, scores2, scores3));
     }
 
-    Set<Tuple> actual = jedis.zrangeWithScores(NEW_SET, 0, 10);
+    final List<Tuple> actual = jedis.zrangeWithScores(NEW_SET, 0, 10);
 
     assertThatActualScoresAreVeryCloseToExpectedScores(expected, actual);
   }
@@ -465,12 +466,12 @@ public abstract class AbstractZInterStoreIntegrationTest implements RedisIntegra
     assertThat(jedis.zinterstore(NEW_SET, new ZParams().aggregate(ZParams.Aggregate.MAX),
         KEY1, KEY2, KEY3)).isEqualTo(5);
 
-    Set<Tuple> expected = new HashSet<>();
+    final List<Tuple> expected = new ArrayList<>();
     for (int i = 6; i <= 10; i++) {
       expected.add(tupleMaxOfScores("player" + i, scores1, scores2, scores3));
     }
 
-    Set<Tuple> actual = jedis.zrangeWithScores(NEW_SET, 0, 10);
+    final List<Tuple> actual = jedis.zrangeWithScores(NEW_SET, 0, 10);
 
     assertThatActualScoresAreVeryCloseToExpectedScores(expected, actual);
   }
@@ -488,12 +489,12 @@ public abstract class AbstractZInterStoreIntegrationTest implements RedisIntegra
     assertThat(jedis.zinterstore(NEW_SET, new ZParams().aggregate(ZParams.Aggregate.MIN),
         KEY1, KEY2, KEY3)).isEqualTo(5);
 
-    Set<Tuple> expected = new HashSet<>();
+    final List<Tuple> expected = new ArrayList<>();
     for (int i = 6; i <= 10; i++) {
       expected.add(tupleMinOfScores("player" + i, scores1, scores2, scores3));
     }
 
-    Set<Tuple> actual = jedis.zrangeWithScores(NEW_SET, 0, 10);
+    final List<Tuple> actual = jedis.zrangeWithScores(NEW_SET, 0, 10);
 
     assertThatActualScoresAreVeryCloseToExpectedScores(expected, actual);
   }
@@ -517,13 +518,13 @@ public abstract class AbstractZInterStoreIntegrationTest implements RedisIntegra
 
     assertThat(jedis.zinterstore(NEW_SET, zParams, KEY1, KEY2, KEY3)).isEqualTo(5);
 
-    Set<Tuple> expected = new HashSet<>();
+    final List<Tuple> expected = new ArrayList<>();
     for (int i = 6; i <= 10; i++) {
       expected.add(tupleSumOfScoresWithWeights("player" + i, scores1, scores2, scores3, weight1,
           weight2, weight3));
     }
 
-    Set<Tuple> actual = jedis.zrangeWithScores(NEW_SET, 0, 10);
+    final List<Tuple> actual = jedis.zrangeWithScores(NEW_SET, 0, 10);
 
     assertThatActualScoresAreVeryCloseToExpectedScores(expected, actual);
   }
@@ -547,13 +548,13 @@ public abstract class AbstractZInterStoreIntegrationTest implements RedisIntegra
 
     assertThat(jedis.zinterstore(NEW_SET, zParams, KEY1, KEY2, KEY3)).isEqualTo(5);
 
-    Set<Tuple> expected = new HashSet<>();
+    final List<Tuple> expected = new ArrayList<>();
     for (int i = 6; i <= 10; i++) {
       expected.add(tupleMaxOfScoresWithWeights("player" + i, scores1, scores2, scores3, weight1,
           weight2, weight3));
     }
 
-    Set<Tuple> actual = jedis.zrangeWithScores(NEW_SET, 0, 10);
+    final List<Tuple> actual = jedis.zrangeWithScores(NEW_SET, 0, 10);
 
     assertThatActualScoresAreVeryCloseToExpectedScores(expected, actual);
   }
@@ -577,13 +578,13 @@ public abstract class AbstractZInterStoreIntegrationTest implements RedisIntegra
 
     assertThat(jedis.zinterstore(NEW_SET, zParams, KEY1, KEY2, KEY3)).isEqualTo(5);
 
-    Set<Tuple> expected = new HashSet<>();
+    final List<Tuple> expected = new ArrayList<>();
     for (int i = 6; i <= 10; i++) {
       expected.add(tupleMinOfScoresWithWeights("player" + i, scores1, scores2, scores3, weight1,
           weight2, weight3));
     }
 
-    Set<Tuple> actual = jedis.zrangeWithScores(NEW_SET, 0, 10);
+    final List<Tuple> actual = jedis.zrangeWithScores(NEW_SET, 0, 10);
 
     assertThatActualScoresAreVeryCloseToExpectedScores(expected, actual);
   }
@@ -603,12 +604,12 @@ public abstract class AbstractZInterStoreIntegrationTest implements RedisIntegra
 
     assertThat(jedis.zinterstore(NEW_SET, zParams, KEY1, KEY2, KEY3)).isEqualTo(5);
 
-    Set<Tuple> expected = new HashSet<>();
+    final List<Tuple> expected = new ArrayList<>();
     for (int i = 6; i <= 10; i++) {
       expected.add(new Tuple("player" + i, score));
     }
 
-    Set<Tuple> actual = jedis.zrangeWithScores(NEW_SET, 0, 10);
+    final List<Tuple> actual = jedis.zrangeWithScores(NEW_SET, 0, 10);
 
     assertThatActualScoresAreVeryCloseToExpectedScores(expected, actual);
   }
@@ -628,12 +629,12 @@ public abstract class AbstractZInterStoreIntegrationTest implements RedisIntegra
 
     assertThat(jedis.zinterstore(NEW_SET, zParams, KEY1, KEY2, KEY3)).isEqualTo(5);
 
-    Set<Tuple> expected = new HashSet<>();
+    final List<Tuple> expected = new ArrayList<>();
     for (int i = 6; i <= 10; i++) {
       expected.add(new Tuple("player" + i, score));
     }
 
-    Set<Tuple> actual = jedis.zrangeWithScores(NEW_SET, 0, 10);
+    final List<Tuple> actual = jedis.zrangeWithScores(NEW_SET, 0, 10);
 
     assertThatActualScoresAreVeryCloseToExpectedScores(expected, actual);
   }
@@ -648,7 +649,7 @@ public abstract class AbstractZInterStoreIntegrationTest implements RedisIntegra
     jedis.zadd(KEY2, scores2);
     jedis.zadd(KEY3, scores3);
 
-    Set<Tuple> expected = new HashSet<>();
+    final List<Tuple> expected = new ArrayList<>();
     for (int i = 12; i <= 13; i++) {
       expected.add(tupleMaxOfScores("player" + i, scores1, scores2, scores3));
     }
@@ -656,7 +657,7 @@ public abstract class AbstractZInterStoreIntegrationTest implements RedisIntegra
     jedis.sendCommand(NEW_SET, Protocol.Command.ZINTERSTORE, NEW_SET, "3",
         KEY1, KEY2, KEY3, "AGGREGATE", "MIN", "AGGREGATE", "MAX");
 
-    Set<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, 10);
+    final List<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, 10);
 
     assertThatActualScoresAreVeryCloseToExpectedScores(expected, results);
   }
@@ -667,12 +668,12 @@ public abstract class AbstractZInterStoreIntegrationTest implements RedisIntegra
     jedis.zadd(KEY1, scores);
     jedis.zadd(KEY2, scores);
 
-    Set<Tuple> expectedResults = convertToTuples(scores, (ignore, score) -> score * 2);
+    final List<Tuple> expectedResults = convertToTuples(scores, (ignore, score) -> score * 2);
 
     // destination key is a key that exists
     assertThat(jedis.zinterstore(KEY1, KEY1, KEY2)).isEqualTo(scores.size());
 
-    Set<Tuple> results = jedis.zrangeWithScores(KEY1, 0, 10);
+    final List<Tuple> results = jedis.zrangeWithScores(KEY1, 0, 10);
 
     assertThatActualScoresAreVeryCloseToExpectedScores(expectedResults, results);
   }
@@ -784,9 +785,9 @@ public abstract class AbstractZInterStoreIntegrationTest implements RedisIntegra
         scores2.get(memberName) * weight2), scores3.get(memberName) * weight3));
   }
 
-  private Set<Tuple> convertToTuples(Map<String, Double> map,
+  private List<Tuple> convertToTuples(Map<String, Double> map,
       BiFunction<Integer, Double, Double> function) {
-    Set<Tuple> tuples = new LinkedHashSet<>();
+    final List<Tuple> tuples = new ArrayList<>();
     int x = 0;
     for (Map.Entry<String, Double> e : map.entrySet()) {
       tuples.add(new Tuple(e.getKey().getBytes(), function.apply(x++, e.getValue())));
@@ -797,8 +798,8 @@ public abstract class AbstractZInterStoreIntegrationTest implements RedisIntegra
 
   @Test
   public void test_assertThatActualScoresAreVeryCloseToExpectedScores() {
-    Set<Tuple> actualResult = new HashSet<>(3);
-    Set<Tuple> expectedResult = new HashSet<>(2);
+    final List<Tuple> actualResult = new ArrayList<>(3);
+    final List<Tuple> expectedResult = new ArrayList<>(2);
 
     actualResult.add(new Tuple("element1", 1.0));
     expectedResult.add(new Tuple("element1", 1.0));
@@ -823,7 +824,7 @@ public abstract class AbstractZInterStoreIntegrationTest implements RedisIntegra
   }
 
   private void assertThatActualScoresAreVeryCloseToExpectedScores(
-      Set<Tuple> expectedResults, Set<Tuple> results) {
+      final List<Tuple> expectedResults, final List<Tuple> results) {
     assertThat(expectedResults.size()).isEqualTo(results.size());
 
     for (Tuple expectedResult : expectedResults) {
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZPopMaxIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZPopMaxIntegrationTest.java
index c578069..bb3f828 100755
--- a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZPopMaxIntegrationTest.java
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZPopMaxIntegrationTest.java
@@ -30,7 +30,7 @@ import org.junit.Test;
 import redis.clients.jedis.HostAndPort;
 import redis.clients.jedis.JedisCluster;
 import redis.clients.jedis.Protocol;
-import redis.clients.jedis.Tuple;
+import redis.clients.jedis.resps.Tuple;
 
 import org.apache.geode.redis.RedisIntegrationTest;
 import org.apache.geode.redis.internal.RedisConstants;
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZPopMinIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZPopMinIntegrationTest.java
index 1d8a21f..c4df69a 100755
--- a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZPopMinIntegrationTest.java
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZPopMinIntegrationTest.java
@@ -30,7 +30,7 @@ import org.junit.Test;
 import redis.clients.jedis.HostAndPort;
 import redis.clients.jedis.JedisCluster;
 import redis.clients.jedis.Protocol;
-import redis.clients.jedis.Tuple;
+import redis.clients.jedis.resps.Tuple;
 
 import org.apache.geode.redis.RedisIntegrationTest;
 import org.apache.geode.redis.internal.RedisConstants;
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZRangeByScoreIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZRangeByScoreIntegrationTest.java
index 39fdae5..47968d0 100644
--- a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZRangeByScoreIntegrationTest.java
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZRangeByScoreIntegrationTest.java
@@ -37,7 +37,7 @@ import org.junit.Test;
 import redis.clients.jedis.HostAndPort;
 import redis.clients.jedis.JedisCluster;
 import redis.clients.jedis.Protocol;
-import redis.clients.jedis.Tuple;
+import redis.clients.jedis.resps.Tuple;
 
 import org.apache.geode.redis.RedisIntegrationTest;
 
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZRangeIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZRangeIntegrationTest.java
index 286176a..8a5cfc4 100755
--- a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZRangeIntegrationTest.java
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZRangeIntegrationTest.java
@@ -24,10 +24,8 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
-import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 import org.junit.After;
 import org.junit.Before;
@@ -35,7 +33,7 @@ import org.junit.Test;
 import redis.clients.jedis.HostAndPort;
 import redis.clients.jedis.JedisCluster;
 import redis.clients.jedis.Protocol;
-import redis.clients.jedis.Tuple;
+import redis.clients.jedis.resps.Tuple;
 
 import org.apache.geode.redis.RedisIntegrationTest;
 import org.apache.geode.redis.internal.RedisConstants;
@@ -139,7 +137,7 @@ public abstract class AbstractZRangeIntegrationTest implements RedisIntegrationT
 
   @Test
   public void shouldAlsoReturnScores_whenWithScoresSpecified() {
-    Set<Tuple> expected = new LinkedHashSet<>();
+    final List<Tuple> expected = new ArrayList<>();
     for (int i = 0; i < members.size(); i++) {
       expected.add(new Tuple(members.get(i), scores.get(i)));
     }
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZRevRangeByScoreIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZRevRangeByScoreIntegrationTest.java
index 0ce84ad..e8e94fe 100644
--- a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZRevRangeByScoreIntegrationTest.java
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZRevRangeByScoreIntegrationTest.java
@@ -40,7 +40,7 @@ import org.junit.runner.RunWith;
 import redis.clients.jedis.HostAndPort;
 import redis.clients.jedis.JedisCluster;
 import redis.clients.jedis.Protocol;
-import redis.clients.jedis.Tuple;
+import redis.clients.jedis.resps.Tuple;
 
 import org.apache.geode.redis.RedisIntegrationTest;
 import org.apache.geode.test.junit.runners.GeodeParamsRunner;
@@ -216,11 +216,11 @@ public abstract class AbstractZRevRangeByScoreIntegrationTest implements RedisIn
   public void shouldReturnRange_boundedByLimit() {
     createZSetRangeTestMap();
 
-    assertThat(jedis.zrevrangeByScore(KEY, "10", "0", 0, 2))
+    assertThat(jedis.zrevrangeByScore(KEY, 10d, 0d, 0, 2))
         .containsExactly("f", "e");
-    assertThat(jedis.zrevrangeByScore(KEY, "10", "0", 2, 3))
+    assertThat(jedis.zrevrangeByScore(KEY, 10d, 0d, 2, 3))
         .containsExactly("d", "c", "b");
-    assertThat(jedis.zrevrangeByScore(KEY, "10", "0", 2, 10))
+    assertThat(jedis.zrevrangeByScore(KEY, 10d, 0d, 2, 10))
         .containsExactly("d", "c", "b");
   }
 
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZRevRangeIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZRevRangeIntegrationTest.java
index 876813e..2408c3d 100644
--- a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZRevRangeIntegrationTest.java
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZRevRangeIntegrationTest.java
@@ -25,7 +25,6 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
-import java.util.Set;
 
 import junitparams.Parameters;
 import junitparams.naming.TestCaseName;
@@ -36,7 +35,7 @@ import org.junit.runner.RunWith;
 import redis.clients.jedis.HostAndPort;
 import redis.clients.jedis.JedisCluster;
 import redis.clients.jedis.Protocol;
-import redis.clients.jedis.Tuple;
+import redis.clients.jedis.resps.Tuple;
 
 import org.apache.geode.redis.RedisIntegrationTest;
 import org.apache.geode.test.junit.runners.GeodeParamsRunner;
@@ -132,7 +131,7 @@ public abstract class AbstractZRevRangeIntegrationTest implements RedisIntegrati
     List<Tuple> expectedRevrange = entries.subList(subListStartIndex, subListEndIndex);
     Collections.reverse(expectedRevrange);
 
-    Set<Tuple> revrange = jedis.zrevrangeWithScores(KEY, start, end);
+    final List<Tuple> revrange = jedis.zrevrangeWithScores(KEY, start, end);
 
     assertThat(revrange).containsExactlyElementsOf(expectedRevrange);
   }
@@ -176,7 +175,7 @@ public abstract class AbstractZRevRangeIntegrationTest implements RedisIntegrati
     List<String> expectedRevrange = entries.subList(subListStartIndex, subListEndIndex);
     Collections.reverse(expectedRevrange);
 
-    Set<String> revrange = jedis.zrevrange(KEY, start, end);
+    final List<String> revrange = jedis.zrevrange(KEY, start, end);
 
     assertThat(revrange).containsExactlyElementsOf(expectedRevrange);
   }
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZScanIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZScanIntegrationTest.java
index d1386c4..f6589b1 100644
--- a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZScanIntegrationTest.java
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZScanIntegrationTest.java
@@ -44,9 +44,9 @@ import redis.clients.jedis.HostAndPort;
 import redis.clients.jedis.Jedis;
 import redis.clients.jedis.JedisCluster;
 import redis.clients.jedis.Protocol;
-import redis.clients.jedis.ScanParams;
-import redis.clients.jedis.ScanResult;
-import redis.clients.jedis.Tuple;
+import redis.clients.jedis.params.ScanParams;
+import redis.clients.jedis.resps.ScanResult;
+import redis.clients.jedis.resps.Tuple;
 
 import org.apache.geode.redis.ConcurrentLoopingThreads;
 import org.apache.geode.redis.RedisIntegrationTest;
@@ -480,8 +480,8 @@ public abstract class AbstractZScanIntegrationTest implements RedisIntegrationTe
     jedis.zadd(KEY, initialSortedSetData);
     final int iterationCount = 500;
 
-    Jedis jedis1 = jedis.getConnectionFromSlot(SLOT_FOR_KEY);
-    Jedis jedis2 = jedis.getConnectionFromSlot(SLOT_FOR_KEY);
+    final Jedis jedis1 = new Jedis(jedis.getConnectionFromSlot(SLOT_FOR_KEY));
+    final Jedis jedis2 = new Jedis(jedis.getConnectionFromSlot(SLOT_FOR_KEY));
 
     new ConcurrentLoopingThreads(iterationCount,
         (i) -> multipleZScanAndAssertOnContentOfResultSet(jedis1, initialSortedSetData, true),
@@ -498,8 +498,8 @@ public abstract class AbstractZScanIntegrationTest implements RedisIntegrationTe
     jedis.zadd(KEY, initialSortedSetData);
     final int iterationCount = 500;
 
-    Jedis jedis1 = jedis.getConnectionFromSlot(SLOT_FOR_KEY);
-    Jedis jedis2 = jedis.getConnectionFromSlot(SLOT_FOR_KEY);
+    final Jedis jedis1 = new Jedis(jedis.getConnectionFromSlot(SLOT_FOR_KEY));
+    final Jedis jedis2 = new Jedis(jedis.getConnectionFromSlot(SLOT_FOR_KEY));
 
     new ConcurrentLoopingThreads(iterationCount,
         (i) -> multipleZScanAndAssertOnContentOfResultSet(jedis1, initialSortedSetData, false),
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZUnionStoreIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZUnionStoreIntegrationTest.java
index afe25f8..a3420fd 100755
--- a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZUnionStoreIntegrationTest.java
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/sortedset/AbstractZUnionStoreIntegrationTest.java
@@ -20,10 +20,10 @@ import static org.apache.geode.test.dunit.rules.RedisClusterStartupRule.REDIS_CL
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
+import java.util.ArrayList;
 import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
+import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.function.BiFunction;
 import java.util.function.Function;
 
@@ -33,8 +33,8 @@ import org.junit.Test;
 import redis.clients.jedis.HostAndPort;
 import redis.clients.jedis.JedisCluster;
 import redis.clients.jedis.Protocol;
-import redis.clients.jedis.Tuple;
-import redis.clients.jedis.ZParams;
+import redis.clients.jedis.params.ZParams;
+import redis.clients.jedis.resps.Tuple;
 
 import org.apache.geode.redis.ConcurrentLoopingThreads;
 import org.apache.geode.redis.RedisIntegrationTest;
@@ -229,12 +229,12 @@ public abstract class AbstractZUnionStoreIntegrationTest implements RedisIntegra
     scores.put("player2", 0D);
     scores.put("player3", 1D);
     scores.put("player4", Double.POSITIVE_INFINITY);
-    Set<Tuple> expectedResults = convertToTuples(scores, (i, x) -> x);
+    List<Tuple> expectedResults = convertToTuples(scores, (i, x) -> x);
     jedis.zadd(KEY1, scores);
 
     jedis.zunionstore(NEW_SET, new ZParams().weights(1), KEY1);
 
-    Set<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, scores.size());
+    List<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, scores.size());
     assertThat(results).containsExactlyElementsOf(expectedResults);
 
     jedis.zunionstore(NEW_SET, new ZParams().weights(0), KEY1);
@@ -251,7 +251,7 @@ public abstract class AbstractZUnionStoreIntegrationTest implements RedisIntegra
 
     jedis.zunionstore(NEW_SET, new ZParams().weights(Double.NEGATIVE_INFINITY), KEY1);
 
-    expectedResults = new LinkedHashSet<>();
+    expectedResults = new ArrayList<>();
     expectedResults.add(new Tuple("player3", Double.NEGATIVE_INFINITY));
     expectedResults.add(new Tuple("player4", Double.NEGATIVE_INFINITY));
     expectedResults.add(new Tuple("player2", 0D));
@@ -263,12 +263,12 @@ public abstract class AbstractZUnionStoreIntegrationTest implements RedisIntegra
   @Test
   public void shouldUnionize_givenASingleSet() {
     Map<String, Double> scores = makeScoreMap(10, x -> (double) x);
-    Set<Tuple> expectedResults = convertToTuples(scores, (i, x) -> x);
+    final List<Tuple> expectedResults = convertToTuples(scores, (i, x) -> x);
     jedis.zadd(KEY1, scores);
 
     assertThat(jedis.zunionstore(NEW_SET, KEY1)).isEqualTo(10);
 
-    Set<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, 10);
+    final List<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, 10);
 
     assertThat(results).containsExactlyElementsOf(expectedResults);
   }
@@ -276,12 +276,12 @@ public abstract class AbstractZUnionStoreIntegrationTest implements RedisIntegra
   @Test
   public void shouldUnionize_givenOneSetDoesNotExist() {
     Map<String, Double> scores = makeScoreMap(10, x -> (double) x);
-    Set<Tuple> expectedResults = convertToTuples(scores, (i, x) -> x);
+    final List<Tuple> expectedResults = convertToTuples(scores, (i, x) -> x);
     jedis.zadd(KEY1, scores);
 
     jedis.zunionstore(NEW_SET, KEY1, KEY2);
 
-    Set<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, 10);
+    final List<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, 10);
 
     assertThat(results).containsExactlyElementsOf(expectedResults);
   }
@@ -289,12 +289,12 @@ public abstract class AbstractZUnionStoreIntegrationTest implements RedisIntegra
   @Test
   public void shouldUnionize_givenWeight() {
     Map<String, Double> scores = makeScoreMap(10, x -> (double) x);
-    Set<Tuple> expectedResults = convertToTuples(scores, (i, x) -> x * 1.5);
+    final List<Tuple> expectedResults = convertToTuples(scores, (i, x) -> x * 1.5);
     jedis.zadd(KEY1, scores);
 
     jedis.zunionstore(KEY1, new ZParams().weights(1.5), KEY1);
 
-    Set<Tuple> results = jedis.zrangeWithScores(KEY1, 0, 10);
+    final List<Tuple> results = jedis.zrangeWithScores(KEY1, 0, 10);
 
     assertThat(results).containsExactlyElementsOf(expectedResults);
   }
@@ -307,11 +307,12 @@ public abstract class AbstractZUnionStoreIntegrationTest implements RedisIntegra
     Map<String, Double> scores2 = makeScoreMap(10, x -> (double) (9 - x));
     jedis.zadd(KEY2, scores2);
 
-    Set<Tuple> expectedResults = convertToTuples(scores1, (i, x) -> (x * 2.0) + ((9 - x) * 1.5));
+    final List<Tuple> expectedResults =
+        convertToTuples(scores1, (i, x) -> (x * 2.0) + ((9 - x) * 1.5));
 
     jedis.zunionstore(NEW_SET, new ZParams().weights(2.0, 1.5), KEY1, KEY2);
 
-    Set<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, 10);
+    final List<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, 10);
 
     assertThat(results).containsExactlyElementsOf(expectedResults);
   }
@@ -324,12 +325,12 @@ public abstract class AbstractZUnionStoreIntegrationTest implements RedisIntegra
     Map<String, Double> scores2 = makeScoreMap(10, x -> 0D);
     jedis.zadd(KEY2, scores2);
 
-    Set<Tuple> expectedResults = convertToTuples(scores2, (i, x) -> x);
+    final List<Tuple> expectedResults = convertToTuples(scores2, (i, x) -> x);
 
     jedis.zunionstore(NEW_SET, new ZParams().aggregate(ZParams.Aggregate.MIN),
         KEY1, KEY2);
 
-    Set<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, 10);
+    final List<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, 10);
 
     assertThat(results).containsExactlyElementsOf(expectedResults);
   }
@@ -342,12 +343,12 @@ public abstract class AbstractZUnionStoreIntegrationTest implements RedisIntegra
     Map<String, Double> scores2 = makeScoreMap(10, x -> (double) ((x % 2 == 0) ? x : 0));
     jedis.zadd(KEY2, scores2);
 
-    Set<Tuple> expectedResults = convertToTuples(scores1, (i, x) -> (double) i);
+    final List<Tuple> expectedResults = convertToTuples(scores1, (i, x) -> (double) i);
 
     jedis.zunionstore(NEW_SET, new ZParams().aggregate(ZParams.Aggregate.MAX),
         KEY1, KEY2);
 
-    Set<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, 10);
+    final List<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, 10);
 
     assertThat(results).containsExactlyElementsOf(expectedResults);
   }
@@ -360,12 +361,12 @@ public abstract class AbstractZUnionStoreIntegrationTest implements RedisIntegra
     Map<String, Double> scores2 = makeScoreMap(10, x -> (double) 1);
     jedis.zadd(KEY2, scores2);
 
-    Set<Tuple> expectedResults = convertToTuples(scores2, (i, x) -> x);
+    final List<Tuple> expectedResults = convertToTuples(scores2, (i, x) -> x);
 
     jedis.sendCommand(NEW_SET, Protocol.Command.ZUNIONSTORE, NEW_SET, "2",
         KEY1, KEY2, "AGGREGATE", "MIN", "AGGREGATE", "MAX");
 
-    Set<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, 10);
+    final List<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, 10);
 
     assertThat(results).containsExactlyElementsOf(expectedResults);
   }
@@ -378,12 +379,12 @@ public abstract class AbstractZUnionStoreIntegrationTest implements RedisIntegra
     Map<String, Double> scores2 = makeScoreMap(10, x -> (double) ((x % 2 == 0) ? x : 0));
     jedis.zadd(KEY2, scores2);
 
-    Set<Tuple> expectedResults = convertToTuples(scores1, (i, x) -> (double) (i * 2));
+    final List<Tuple> expectedResults = convertToTuples(scores1, (i, x) -> (double) (i * 2));
 
     jedis.zunionstore(NEW_SET, new ZParams().aggregate(ZParams.Aggregate.MAX).weights(2, 2),
         KEY1, KEY2);
 
-    Set<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, 10);
+    final List<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, 10);
 
     assertThat(results).containsExactlyElementsOf(expectedResults);
   }
@@ -399,12 +400,12 @@ public abstract class AbstractZUnionStoreIntegrationTest implements RedisIntegra
     Map<String, Double> scores3 = makeScoreMap(10, x -> (double) (x * 3));
     jedis.zadd(SORTED_SET_KEY3, scores3);
 
-    Set<Tuple> expectedResults = convertToTuples(scores1, (i, x) -> x * 6);
+    final List<Tuple> expectedResults = convertToTuples(scores1, (i, x) -> x * 6);
 
     jedis.zunionstore(NEW_SET, new ZParams().aggregate(ZParams.Aggregate.SUM),
         KEY1, KEY2, SORTED_SET_KEY3);
 
-    Set<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, 10);
+    final List<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, 10);
 
     assertThat(results).containsExactlyElementsOf(expectedResults);
   }
@@ -417,12 +418,12 @@ public abstract class AbstractZUnionStoreIntegrationTest implements RedisIntegra
     Map<String, Double> scores2 = makeScoreMap(1, 2, 10, x -> (double) x);
     jedis.zadd(KEY2, scores2);
 
-    Set<Tuple> expectedResults =
+    final List<Tuple> expectedResults =
         convertToTuples(makeScoreMap(0, 1, 20, x -> (double) x), (i, x) -> x);
 
     jedis.zunionstore(NEW_SET, KEY1, KEY2);
 
-    Set<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, 20);
+    final List<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, 20);
 
     assertThat(results).containsExactlyElementsOf(expectedResults);
   }
@@ -435,12 +436,12 @@ public abstract class AbstractZUnionStoreIntegrationTest implements RedisIntegra
     Map<String, Double> scores2 = makeScoreMap(5, 1, 10, x -> (double) (x < 10 ? x : x * 2));
     jedis.zadd(KEY2, scores2);
 
-    Set<Tuple> expectedResults = convertToTuples(makeScoreMap(0, 1, 15, x -> (double) x),
+    final List<Tuple> expectedResults = convertToTuples(makeScoreMap(0, 1, 15, x -> (double) x),
         (i, x) -> (double) (i < 5 ? i : i * 2));
 
     jedis.zunionstore(NEW_SET, KEY1, KEY2);
 
-    Set<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, 20);
+    final List<Tuple> results = jedis.zrangeWithScores(NEW_SET, 0, 20);
 
     assertThat(results).containsExactlyElementsOf(expectedResults);
   }
@@ -453,12 +454,12 @@ public abstract class AbstractZUnionStoreIntegrationTest implements RedisIntegra
     Map<String, Double> scores2 = makeScoreMap(10, x -> (double) x);
     jedis.zadd(KEY2, scores2);
 
-    Set<Tuple> expectedResults = convertToTuples(scores1, (i, x) -> (double) (i * 10));
+    final List<Tuple> expectedResults = convertToTuples(scores1, (i, x) -> (double) (i * 10));
 
     jedis.zunionstore(KEY1,
         new ZParams().weights(1, 10).aggregate(ZParams.Aggregate.MAX), KEY1, KEY2);
 
-    Set<Tuple> results = jedis.zrangeWithScores(KEY1, 0, 20);
+    final List<Tuple> results = jedis.zrangeWithScores(KEY1, 0, 20);
 
     assertThat(results).containsExactlyElementsOf(expectedResults);
   }
@@ -468,12 +469,12 @@ public abstract class AbstractZUnionStoreIntegrationTest implements RedisIntegra
     Map<String, Double> scores1 = makeScoreMap(10, x -> (double) x);
     jedis.zadd(KEY1, scores1);
 
-    Set<Tuple> expectedResults = convertToTuples(scores1, (i, x) -> x * 2);
+    final List<Tuple> expectedResults = convertToTuples(scores1, (i, x) -> x * 2);
 
     // Default aggregation is SUM
     jedis.zunionstore(KEY1, KEY1, KEY1);
 
-    Set<Tuple> results = jedis.zrangeWithScores(KEY1, 0, 10);
+    final List<Tuple> results = jedis.zrangeWithScores(KEY1, 0, 10);
 
     assertThat(results).containsExactlyElementsOf(expectedResults);
   }
@@ -483,11 +484,11 @@ public abstract class AbstractZUnionStoreIntegrationTest implements RedisIntegra
     Map<String, Double> scores1 = makeScoreMap(10, x -> (double) x);
     jedis.zadd(KEY1, scores1);
 
-    Set<Tuple> expectedResults = convertToTuples(scores1, (i, x) -> x);
+    final List<Tuple> expectedResults = convertToTuples(scores1, (i, x) -> x);
 
     jedis.zunionstore(KEY1, KEY1);
 
-    Set<Tuple> results = jedis.zrangeWithScores(KEY1, 0, 10);
+    final List<Tuple> results = jedis.zrangeWithScores(KEY1, 0, 10);
 
     assertThat(results).containsExactlyElementsOf(expectedResults);
   }
@@ -530,9 +531,9 @@ public abstract class AbstractZUnionStoreIntegrationTest implements RedisIntegra
     return map;
   }
 
-  private Set<Tuple> convertToTuples(Map<String, Double> map,
+  private List<Tuple> convertToTuples(Map<String, Double> map,
       BiFunction<Integer, Double, Double> function) {
-    Set<Tuple> tuples = new LinkedHashSet<>();
+    List<Tuple> tuples = new ArrayList<>();
     int x = 0;
     for (Map.Entry<String, Double> e : map.entrySet()) {
       tuples.add(new Tuple(e.getKey().getBytes(), function.apply(x++, e.getValue())));
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/string/AbstractBitOpIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/string/AbstractBitOpIntegrationTest.java
index 49a6a95..9ab7b5e 100755
--- a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/string/AbstractBitOpIntegrationTest.java
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/string/AbstractBitOpIntegrationTest.java
@@ -24,10 +24,10 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-import redis.clients.jedis.BitOP;
 import redis.clients.jedis.HostAndPort;
 import redis.clients.jedis.JedisCluster;
 import redis.clients.jedis.Protocol;
+import redis.clients.jedis.args.BitOP;
 
 import org.apache.geode.redis.RedisIntegrationTest;
 import org.apache.geode.test.awaitility.GeodeAwaitility;
diff --git a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/string/AbstractBitPosIntegrationTest.java b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/string/AbstractBitPosIntegrationTest.java
index 1c33e0d..762cf9a 100755
--- a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/string/AbstractBitPosIntegrationTest.java
+++ b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/string/AbstractBitPosIntegrationTest.java
@@ -21,9 +21,9 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-import redis.clients.jedis.BitPosParams;
 import redis.clients.jedis.Jedis;
 import redis.clients.jedis.Protocol;
+import redis.clients.jedis.params.BitPosParams;
 
 import org.apache.geode.redis.RedisIntegrationTest;
 import org.apache.geode.test.awaitility.GeodeAwaitility;