diff --git a/Makefile b/Makefile index 761d033..a5328e2 100644 --- a/Makefile +++ b/Makefile @@ -6,6 +6,7 @@ pidfile /tmp/redis1.pid logfile /tmp/redis1.log save "" appendonly no +client-output-buffer-limit pubsub 256k 128k 5 endef define REDIS2_CONF @@ -37,6 +38,7 @@ pidfile /tmp/redis4.pid logfile /tmp/redis4.log save "" appendonly no +slaveof localhost 6381 endef define REDIS5_CONF @@ -48,8 +50,22 @@ pidfile /tmp/redis5.pid logfile /tmp/redis5.log save "" appendonly no +slaveof localhost 6381 endef +define REDIS6_CONF +daemonize yes +port 6384 +requirepass foobared +masterauth foobared +pidfile /tmp/redis6.pid +logfile /tmp/redis6.log +save "" +appendonly no +slaveof localhost 6379 +endef + +# SENTINELS define REDIS_SENTINEL1 port 26379 daemonize yes @@ -57,7 +73,6 @@ sentinel monitor mymaster 127.0.0.1 6379 1 sentinel auth-pass mymaster foobared sentinel down-after-milliseconds mymaster 3000 sentinel failover-timeout mymaster 900000 -sentinel can-failover mymaster yes sentinel parallel-syncs mymaster 1 pidfile /tmp/sentinel1.pid logfile /tmp/sentinel1.log @@ -69,7 +84,6 @@ daemonize yes sentinel monitor mymaster 127.0.0.1 6381 2 sentinel auth-pass mymaster foobared sentinel down-after-milliseconds mymaster 3000 -sentinel can-failover mymaster yes sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 900000 pidfile /tmp/sentinel2.pid @@ -82,31 +96,78 @@ daemonize yes sentinel monitor mymaster 127.0.0.1 6381 2 sentinel auth-pass mymaster foobared sentinel down-after-milliseconds mymaster 3000 -sentinel can-failover mymaster yes sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 900000 pidfile /tmp/sentinel3.pid logfile /tmp/sentinel3.log endef +# CLUSTER REDIS NODES +define REDIS_CLUSTER_NODE1_CONF +daemonize yes +port 7379 +pidfile /tmp/redis_cluster_node1.pid +logfile /tmp/redis_cluster_node1.log +save "" +appendonly no +cluster-enabled yes +cluster-config-file /tmp/redis_cluster_node1.conf +endef + +define REDIS_CLUSTER_NODE2_CONF +daemonize yes +port 7380 +pidfile /tmp/redis_cluster_node2.pid +logfile /tmp/redis_cluster_node2.log +save "" +appendonly no +cluster-enabled yes +cluster-config-file /tmp/redis_cluster_node2.conf +endef + +define REDIS_CLUSTER_NODE3_CONF +daemonize yes +port 7381 +pidfile /tmp/redis_cluster_node3.pid +logfile /tmp/redis_cluster_node3.log +save "" +appendonly no +cluster-enabled yes +cluster-config-file /tmp/redis_cluster_node3.conf +endef + export REDIS1_CONF export REDIS2_CONF export REDIS3_CONF export REDIS4_CONF export REDIS5_CONF +export REDIS6_CONF export REDIS_SENTINEL1 export REDIS_SENTINEL2 export REDIS_SENTINEL3 +export REDIS_CLUSTER_NODE1_CONF +export REDIS_CLUSTER_NODE2_CONF +export REDIS_CLUSTER_NODE3_CONF -start: +start: cleanup echo "$$REDIS1_CONF" | redis-server - echo "$$REDIS2_CONF" | redis-server - echo "$$REDIS3_CONF" | redis-server - echo "$$REDIS4_CONF" | redis-server - echo "$$REDIS5_CONF" | redis-server - - echo "$$REDIS_SENTINEL1" | redis-server - --sentinel - echo "$$REDIS_SENTINEL2" | redis-server - --sentinel - echo "$$REDIS_SENTINEL3" | redis-server - --sentinel + echo "$$REDIS6_CONF" | redis-server - + echo "$$REDIS_SENTINEL1" > /tmp/sentinel1.conf && redis-server /tmp/sentinel1.conf --sentinel + @sleep 0.5 + echo "$$REDIS_SENTINEL2" > /tmp/sentinel2.conf && redis-server /tmp/sentinel2.conf --sentinel + @sleep 0.5 + echo "$$REDIS_SENTINEL3" > /tmp/sentinel3.conf && redis-server /tmp/sentinel3.conf --sentinel + echo "$$REDIS_CLUSTER_NODE1_CONF" | redis-server - + echo "$$REDIS_CLUSTER_NODE2_CONF" | redis-server - + echo "$$REDIS_CLUSTER_NODE3_CONF" | redis-server - + +cleanup: + - rm -vf /tmp/redis_cluster_node*.conf 2>/dev/null + - rm dump.rdb appendonly.aof - 2>/dev/null stop: kill `cat /tmp/redis1.pid` @@ -115,76 +176,33 @@ stop: kill `cat /tmp/redis3.pid` || true kill `cat /tmp/redis4.pid` || true kill `cat /tmp/redis5.pid` || true + kill `cat /tmp/redis6.pid` || true kill `cat /tmp/sentinel1.pid` kill `cat /tmp/sentinel2.pid` kill `cat /tmp/sentinel3.pid` + kill `cat /tmp/redis_cluster_node1.pid` || true + kill `cat /tmp/redis_cluster_node2.pid` || true + kill `cat /tmp/redis_cluster_node3.pid` || true + rm -f /tmp/redis_cluster_node1.conf + rm -f /tmp/redis_cluster_node2.conf + rm -f /tmp/redis_cluster_node3.conf test: - echo "$$REDIS1_CONF" | redis-server - - echo "$$REDIS2_CONF" | redis-server - - echo "$$REDIS3_CONF" | redis-server - - echo "$$REDIS4_CONF" | redis-server - - echo "$$REDIS5_CONF" | redis-server - - echo "$$REDIS_SENTINEL1" | redis-server - --sentinel - echo "$$REDIS_SENTINEL2" | redis-server - --sentinel - echo "$$REDIS_SENTINEL3" | redis-server - --sentinel - - mvn clean compile test - - kill `cat /tmp/redis1.pid` - kill `cat /tmp/redis2.pid` - # this get's segfaulted by the tests - kill `cat /tmp/redis3.pid` || true - kill `cat /tmp/redis4.pid` || true - kill `cat /tmp/redis5.pid` || true - kill `cat /tmp/sentinel1.pid` - kill `cat /tmp/sentinel2.pid` - kill `cat /tmp/sentinel3.pid` + make start + sleep 2 + mvn -Dtest=${TEST} clean compile test + make stop deploy: - echo "$$REDIS1_CONF" | redis-server - - echo "$$REDIS2_CONF" | redis-server - - echo "$$REDIS3_CONF" | redis-server - - echo "$$REDIS4_CONF" | redis-server - - echo "$$REDIS5_CONF" | redis-server - - echo "$$REDIS_SENTINEL1" | redis-server - --sentinel - echo "$$REDIS_SENTINEL2" | redis-server - --sentinel - echo "$$REDIS_SENTINEL3" | redis-server - --sentinel - + make start mvn clean deploy - - kill `cat /tmp/redis1.pid` - kill `cat /tmp/redis2.pid` - # this get's segfaulted by the tests - kill `cat /tmp/redis3.pid` || true - kill `cat /tmp/redis4.pid` || true - kill `cat /tmp/redis5.pid` || true - kill `cat /tmp/sentinel1.pid` - kill `cat /tmp/sentinel2.pid` - kill `cat /tmp/sentinel3.pid` + make stop release: - echo "$$REDIS1_CONF" | redis-server - - echo "$$REDIS2_CONF" | redis-server - - echo "$$REDIS3_CONF" | redis-server - - echo "$$REDIS4_CONF" | redis-server - - echo "$$REDIS5_CONF" | redis-server - - echo "$$REDIS_SENTINEL1" | redis-server - --sentinel - echo "$$REDIS_SENTINEL2" | redis-server - --sentinel - echo "$$REDIS_SENTINEL3" | redis-server - --sentinel - + make start mvn release:clean mvn release:prepare mvn release:perform - - kill `cat /tmp/redis1.pid` - kill `cat /tmp/redis2.pid` - # this get's segfaulted by the tests - kill `cat /tmp/redis3.pid` || true - kill `cat /tmp/redis4.pid` || true - kill `cat /tmp/redis5.pid` || true - kill `cat /tmp/sentinel1.pid` - kill `cat /tmp/sentinel2.pid` - kill `cat /tmp/sentinel3.pid` + make stop .PHONY: test diff --git a/README.md b/README.md index 3b2a7db..ac3c67d 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Jedis is a blazingly small and sane [Redis](http://github.com/antirez/redis "Red Jedis was conceived to be EASY to use. -Jedis is fully compatible with redis 2.6.14. +Jedis is fully compatible with redis 2.8.5. ## Community @@ -33,6 +33,7 @@ All of the following redis features are supported: - Key-tags for sharding - Sharding with pipelining - Scripting with pipelining +- Redis Cluster ## How do I use it? @@ -45,7 +46,7 @@ Or use it as a maven dependency: redis.clients jedis - 2.0.0 + 2.2.1 jar compile @@ -65,6 +66,19 @@ Please check the [wiki](http://github.com/xetorthio/jedis/wiki "wiki"). There ar And you are done! +## Jedis Cluster + +Redis cluster [specification](http://redis.io/topics/cluster-spec) (still under development) is implemented + +```java +Set jedisClusterNodes = new HashSet(); +//Jedis Cluster will attempt to discover cluster nodes automatically +jedisClusterNodes.add(new HostAndPort("127.0.0.1", 7379)); +JedisCluster jc = new JedisCluster(jedisClusterNode); +jc.set("foo", "bar"); +String value = jc.get("foo"); +``` + ## I want to contribute! That is great! Just fork the project in github. Create a topic branch, write some code, and add some tests for your new code. diff --git a/build.gradle b/build.gradle index e9076f3..30af731 100644 --- a/build.gradle +++ b/build.gradle @@ -11,8 +11,8 @@ repositories { } dependencies { - testCompile 'junit:junit:4.8.1' - compile 'commons-pool:commons-pool:1.5.5' + testCompile 'junit:junit:4.11' + compile 'org.apache.commons:commons-pool2:2.0' } @@ -28,6 +28,6 @@ uploadArchives { */ task createWrapper(type: Wrapper) { - gradleVersion = '1.0-milestone-6' + gradleVersion = '1.8' } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 45bfb5c..667288a 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index b3e777e..cf32f33 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Fri Dec 23 12:54:50 CST 2011 +#Mon Nov 04 18:13:13 EST 2013 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=http\://repo.gradle.org/gradle/distributions/gradle-1.0-milestone-6-bin.zip +distributionUrl=http\://services.gradle.org/distributions/gradle-1.8-bin.zip diff --git a/gradlew b/gradlew index d8809f1..91a7e26 100755 --- a/gradlew +++ b/gradlew @@ -1,16 +1,16 @@ -#!/bin/bash +#!/usr/bin/env bash ############################################################################## -## ## -## Gradle wrapper script for UN*X ## -## ## +## +## Gradle start up script for UN*X +## ############################################################################## -# Uncomment those lines to set JVM options. GRADLE_OPTS and JAVA_OPTS can be used together. -# GRADLE_OPTS="$GRADLE_OPTS -Xmx512m" -# JAVA_OPTS="$JAVA_OPTS -Xmx512m" +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" -GRADLE_APP_NAME=Gradle +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" @@ -42,54 +42,51 @@ case "`uname`" in ;; esac -# Attempt to set JAVA_HOME if it's not already set. -if [ -z "$JAVA_HOME" ] ; then - if $darwin ; then - [ -z "$JAVA_HOME" -a -d "/Library/Java/Home" ] && export JAVA_HOME="/Library/Java/Home" - [ -z "$JAVA_HOME" -a -d "/System/Library/Frameworks/JavaVM.framework/Home" ] && export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Home" - else - javaExecutable="`which javac`" - [ -z "$javaExecutable" -o "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ] && die "JAVA_HOME not set and cannot find javac to deduce location, please set JAVA_HOME." - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - [ `expr "$readLink" : '\([^ ]*\)'` = "no" ] && die "JAVA_HOME not set and readlink not available, please set JAVA_HOME." - javaExecutable="`readlink -f \"$javaExecutable\"`" - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - export JAVA_HOME="$javaHome" - fi -fi - # For Cygwin, ensure paths are in UNIX format before anything is touched. if $cygwin ; then - [ -n "$JAVACMD" ] && JAVACMD=`cygpath --unix "$JAVACMD"` [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` fi -STARTER_MAIN_CLASS=org.gradle.wrapper.GradleWrapperMain -CLASSPATH=`dirname "$0"`/gradle/wrapper/gradle-wrapper.jar -WRAPPER_PROPERTIES=`dirname "$0"`/gradle/wrapper/gradle-wrapper.properties -# Determine the Java command to use to start the JVM. -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" else - JAVACMD="java" + PRG=`dirname "$PRG"`"/$link" fi -fi -if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >&- +APP_HOME="`pwd -P`" +cd "$SAVED" >&- + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." -fi -if [ -z "$JAVA_HOME" ] ; then - warn "JAVA_HOME environment variable is not set" fi # Increase the maximum file descriptors if we can. @@ -104,19 +101,18 @@ if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then warn "Could not set maximum file descriptor limit: $MAX_FD" fi else - warn "Could not query businessSystem maximum file descriptor limit: $MAX_FD_LIMIT" + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" fi fi -# For Darwin, add GRADLE_APP_NAME to the JAVA_OPTS as -Xdock:name +# For Darwin, add options to specify how the application appears in the dock if $darwin; then - JAVA_OPTS="$JAVA_OPTS -Xdock:name=$GRADLE_APP_NAME" -# we may also want to set -Xdock:image + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi # For Cygwin, switch paths to Windows format before running java if $cygwin ; then - JAVA_HOME=`cygpath --path --mixed "$JAVA_HOME"` + APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` # We build the pattern for arguments to be converted via cygpath @@ -143,7 +139,7 @@ if $cygwin ; then eval `echo args$i`="\"$arg\"" fi i=$((i+1)) - done + done case $i in (0) set -- ;; (1) set -- "$args0" ;; @@ -158,11 +154,11 @@ if $cygwin ; then esac fi -GRADLE_APP_BASE_NAME=`basename "$0"` +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" -exec "$JAVACMD" $JAVA_OPTS $GRADLE_OPTS \ - -classpath "$CLASSPATH" \ - -Dorg.gradle.appname="$GRADLE_APP_BASE_NAME" \ - -Dorg.gradle.wrapper.properties="$WRAPPER_PROPERTIES" \ - $STARTER_MAIN_CLASS \ - "$@" +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/gradlew.bat b/gradlew.bat index 4855abb..aec9973 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,24 +1,37 @@ @if "%DEBUG%" == "" @echo off @rem ########################################################################## -@rem ## -@rem Gradle startup script for Windows ## -@rem ## +@rem +@rem Gradle startup script for Windows +@rem @rem ########################################################################## @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal -@rem Uncomment those lines to set JVM options. GRADLE_OPTS and JAVA_OPTS can be used together. -@rem set GRADLE_OPTS=%GRADLE_OPTS% -Xmx512m -@rem set JAVA_OPTS=%JAVA_OPTS% -Xmx512m +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=.\ +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% @rem Find java.exe -set JAVA_EXE=java.exe -if not defined JAVA_HOME goto init +if defined JAVA_HOME goto findJavaFromJavaHome +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe @@ -29,14 +42,14 @@ echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% echo. echo Please set the JAVA_HOME variable in your environment to match the echo location of your Java installation. -echo. -goto end + +goto fail :init @rem Get command-line arguments, handling Windowz variants if not "%OS%" == "Windows_NT" goto win9xME_args -if "%eval[2+2]" == "4" goto 4NT_args +if "%@eval[2+2]" == "4" goto 4NT_args :win9xME_args @rem Slurp the command line arguments. @@ -56,27 +69,22 @@ set CMD_LINE_ARGS=%$ :execute @rem Setup the command line -set STARTER_MAIN_CLASS=org.gradle.wrapper.GradleWrapperMain -set CLASSPATH=%DIRNAME%\gradle\wrapper\gradle-wrapper.jar -set WRAPPER_PROPERTIES=%DIRNAME%\gradle\wrapper\gradle-wrapper.properties - -set GRADLE_OPTS=%JAVA_OPTS% %GRADLE_OPTS% -Dorg.gradle.wrapper.properties="%WRAPPER_PROPERTIES%" +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar @rem Execute Gradle -"%JAVA_EXE%" %GRADLE_OPTS% -classpath "%CLASSPATH%" %STARTER_MAIN_CLASS% %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% :end @rem End local scope for the variables with windows NT shell if "%ERRORLEVEL%"=="0" goto mainEnd -if not "%OS%"=="Windows_NT" echo 1 > nul | choice /n /c:1 - +:fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit "%ERRORLEVEL%" -exit /b "%ERRORLEVEL%" +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 :mainEnd if "%OS%"=="Windows_NT" endlocal -:omega \ No newline at end of file +:omega diff --git a/pom.xml b/pom.xml index bb63109..c2c7766 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ jar redis.clients jedis - 2.2.2-SNAPSHOT + 2.3.2-SNAPSHOT Jedis Jedis is a blazingly small and sane Redis java client. https://github.com/xetorthio/jedis @@ -45,9 +45,10 @@ - localhost:6379,localhost:6380,localhost:6381,localhost:6382,localhost:6383 - localhost:26379,localhost:26380 - github + localhost:6379,localhost:6380,localhost:6381,localhost:6382,localhost:6383,localhost:6384 + localhost:26379,localhost:26380,localhost:26381 + localhost:7379,localhost:7380,localhost:7381 + github @@ -59,9 +60,9 @@ test - commons-pool - commons-pool - 1.6 + org.apache.commons + commons-pool2 + 2.0 jar compile @@ -115,11 +116,11 @@ org.apache.maven.plugins maven-release-plugin - 2.4.1 + 2.4.2 maven-deploy-plugin - 2.7 + 2.8.1 internal.repo::default::file://${project.build.directory}/mvn-repo diff --git a/src/main/java/redis/clients/jedis/AdvancedBinaryJedisCommands.java b/src/main/java/redis/clients/jedis/AdvancedBinaryJedisCommands.java index 51b4879..224dd11 100644 --- a/src/main/java/redis/clients/jedis/AdvancedBinaryJedisCommands.java +++ b/src/main/java/redis/clients/jedis/AdvancedBinaryJedisCommands.java @@ -1,6 +1,5 @@ package redis.clients.jedis; - import java.util.List; public interface AdvancedBinaryJedisCommands { diff --git a/src/main/java/redis/clients/jedis/AdvancedJedisCommands.java b/src/main/java/redis/clients/jedis/AdvancedJedisCommands.java index 5ed50eb..45e825b 100644 --- a/src/main/java/redis/clients/jedis/AdvancedJedisCommands.java +++ b/src/main/java/redis/clients/jedis/AdvancedJedisCommands.java @@ -1,9 +1,8 @@ package redis.clients.jedis; -import redis.clients.util.Slowlog; - import java.util.List; +import redis.clients.util.Slowlog; public interface AdvancedJedisCommands { List configGet(String pattern); diff --git a/src/main/java/redis/clients/jedis/BasicCommands.java b/src/main/java/redis/clients/jedis/BasicCommands.java index 482d43b..c201e41 100644 --- a/src/main/java/redis/clients/jedis/BasicCommands.java +++ b/src/main/java/redis/clients/jedis/BasicCommands.java @@ -27,7 +27,7 @@ public interface BasicCommands { String shutdown(); String info(); - + String info(String section); String slaveof(String host, int port); @@ -39,4 +39,6 @@ public interface BasicCommands { String debug(DebugParams params); String configResetStat(); + + Long waitReplicas(int replicas, long timeout); } diff --git a/src/main/java/redis/clients/jedis/BasicRedisPipeline.java b/src/main/java/redis/clients/jedis/BasicRedisPipeline.java index 97658d8..bec6e8c 100644 --- a/src/main/java/redis/clients/jedis/BasicRedisPipeline.java +++ b/src/main/java/redis/clients/jedis/BasicRedisPipeline.java @@ -1,8 +1,5 @@ package redis.clients.jedis; - -import java.util.List; - /** * Pipelined responses for all of the low level, non key related commands */ diff --git a/src/main/java/redis/clients/jedis/BinaryClient.java b/src/main/java/redis/clients/jedis/BinaryClient.java index acb120b..26cd8f2 100644 --- a/src/main/java/redis/clients/jedis/BinaryClient.java +++ b/src/main/java/redis/clients/jedis/BinaryClient.java @@ -1,22 +1,26 @@ package redis.clients.jedis; -import redis.clients.jedis.Protocol.Command; -import redis.clients.jedis.Protocol.Keyword; -import redis.clients.util.SafeEncoder; +import static redis.clients.jedis.Protocol.toByteArray; +import static redis.clients.jedis.Protocol.Command.*; +import static redis.clients.jedis.Protocol.Keyword.ENCODING; +import static redis.clients.jedis.Protocol.Keyword.IDLETIME; +import static redis.clients.jedis.Protocol.Keyword.LEN; +import static redis.clients.jedis.Protocol.Keyword.LIMIT; +import static redis.clients.jedis.Protocol.Keyword.NO; +import static redis.clients.jedis.Protocol.Keyword.ONE; +import static redis.clients.jedis.Protocol.Keyword.REFCOUNT; +import static redis.clients.jedis.Protocol.Keyword.RESET; +import static redis.clients.jedis.Protocol.Keyword.STORE; +import static redis.clients.jedis.Protocol.Keyword.WITHSCORES; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import static redis.clients.jedis.Protocol.Command.*; -import static redis.clients.jedis.Protocol.Command.EXISTS; -import static redis.clients.jedis.Protocol.Command.PSUBSCRIBE; -import static redis.clients.jedis.Protocol.Command.PUNSUBSCRIBE; -import static redis.clients.jedis.Protocol.Command.SUBSCRIBE; -import static redis.clients.jedis.Protocol.Command.UNSUBSCRIBE; -import static redis.clients.jedis.Protocol.Keyword.*; -import static redis.clients.jedis.Protocol.toByteArray; +import redis.clients.jedis.Protocol.Command; +import redis.clients.jedis.Protocol.Keyword; +import redis.clients.util.SafeEncoder; public class BinaryClient extends Connection { public enum LIST_POSITION { @@ -34,10 +38,16 @@ public class BinaryClient extends Connection { private long db; + private boolean isInWatch; + public boolean isInMulti() { return isInMulti; } + public boolean isInWatch() { + return isInWatch; + } + public BinaryClient(final String host) { super(host); } @@ -82,11 +92,11 @@ public class BinaryClient extends Connection { sendCommand(Command.SET, key, value); } - public void set(final byte[] key, final byte[] value, final byte[] nxxx, final byte[] expx, final long time) { - sendCommand(Command.SET, key, value, nxxx, expx, toByteArray(time)); + public void set(final byte[] key, final byte[] value, final byte[] nxxx, + final byte[] expx, final long time) { + sendCommand(Command.SET, key, value, nxxx, expx, toByteArray(time)); } - public void get(final byte[] key) { sendCommand(Command.GET, key); } @@ -377,15 +387,16 @@ public class BinaryClient extends Connection { sendCommand(ZADD, key, toByteArray(score), member); } - public void zaddBinary(final byte[] key, Map scoreMembers) { + public void zaddBinary(final byte[] key, + final Map scoreMembers) { + ArrayList args = new ArrayList( scoreMembers.size() * 2 + 1); - args.add(key); - for (Map.Entry entry : scoreMembers.entrySet()) { - args.add(toByteArray(entry.getKey())); - args.add(entry.getValue()); + for (Map.Entry entry : scoreMembers.entrySet()) { + args.add(toByteArray(entry.getValue())); + args.add(entry.getKey()); } byte[][] argsArray = new byte[args.size()][]; @@ -447,19 +458,23 @@ public class BinaryClient extends Connection { public void discard() { sendCommand(DISCARD); isInMulti = false; + isInWatch = false; } public void exec() { sendCommand(EXEC); isInMulti = false; + isInWatch = false; } public void watch(final byte[]... keys) { sendCommand(WATCH, keys); + isInWatch = true; } public void unwatch() { sendCommand(UNWATCH); + isInWatch = false; } public void sort(final byte[] key) { @@ -476,14 +491,14 @@ public class BinaryClient extends Connection { public void blpop(final byte[][] args) { sendCommand(BLPOP, args); } - + public void blpop(final int timeout, final byte[]... keys) { - final List args = new ArrayList(); - for (final byte[] arg : keys) { - args.add(arg); - } - args.add(Protocol.toByteArray(timeout)); - blpop(args.toArray(new byte[args.size()][])); + final List args = new ArrayList(); + for (final byte[] arg : keys) { + args.add(arg); + } + args.add(Protocol.toByteArray(timeout)); + blpop(args.toArray(new byte[args.size()][])); } public void sort(final byte[] key, final SortingParams sortingParameters, @@ -503,14 +518,14 @@ public class BinaryClient extends Connection { public void brpop(final byte[][] args) { sendCommand(BRPOP, args); } - + public void brpop(final int timeout, final byte[]... keys) { - final List args = new ArrayList(); - for (final byte[] arg : keys) { - args.add(arg); - } - args.add(Protocol.toByteArray(timeout)); - brpop(args.toArray(new byte[args.size()][])); + final List args = new ArrayList(); + for (final byte[] arg : keys) { + args.add(arg); + } + args.add(Protocol.toByteArray(timeout)); + brpop(args.toArray(new byte[args.size()][])); } public void auth(final String password) { @@ -543,32 +558,39 @@ public class BinaryClient extends Connection { } public void punsubscribe(final byte[]... patterns) { - sendCommand(PUNSUBSCRIBE, patterns); + sendCommand(PUNSUBSCRIBE, patterns); + } + + public void pubsub(final byte[]... args) { + sendCommand(PUBSUB, args); } - public void zcount(final byte[] key, final double min, final double max) { - byte byteArrayMin[] = (min == Double.NEGATIVE_INFINITY) ? "-inf".getBytes() : toByteArray(min); - byte byteArrayMax[] = (max == Double.POSITIVE_INFINITY) ? "+inf".getBytes() : toByteArray(max); + byte byteArrayMin[] = (min == Double.NEGATIVE_INFINITY) ? "-inf" + .getBytes() : toByteArray(min); + byte byteArrayMax[] = (max == Double.POSITIVE_INFINITY) ? "+inf" + .getBytes() : toByteArray(max); - sendCommand(ZCOUNT, key, byteArrayMin, byteArrayMax); + sendCommand(ZCOUNT, key, byteArrayMin, byteArrayMax); } public void zcount(final byte[] key, final byte min[], final byte max[]) { - sendCommand(ZCOUNT, key, min, max); + sendCommand(ZCOUNT, key, min, max); } public void zcount(final byte[] key, final String min, final String max) { - sendCommand(ZCOUNT, key, min.getBytes(), max.getBytes()); + sendCommand(ZCOUNT, key, min.getBytes(), max.getBytes()); } public void zrangeByScore(final byte[] key, final double min, - final double max) { + final double max) { - byte byteArrayMin[] = (min == Double.NEGATIVE_INFINITY) ? "-inf".getBytes() : toByteArray(min); - byte byteArrayMax[] = (max == Double.POSITIVE_INFINITY) ? "+inf".getBytes() : toByteArray(max); + byte byteArrayMin[] = (min == Double.NEGATIVE_INFINITY) ? "-inf" + .getBytes() : toByteArray(min); + byte byteArrayMax[] = (max == Double.POSITIVE_INFINITY) ? "+inf" + .getBytes() : toByteArray(max); - sendCommand(ZRANGEBYSCORE, key, byteArrayMin, byteArrayMax); + sendCommand(ZRANGEBYSCORE, key, byteArrayMin, byteArrayMax); } public void zrangeByScore(final byte[] key, final byte[] min, @@ -577,17 +599,19 @@ public class BinaryClient extends Connection { } public void zrangeByScore(final byte[] key, final String min, - final String max) { - sendCommand(ZRANGEBYSCORE, key, min.getBytes(), max.getBytes()); + final String max) { + sendCommand(ZRANGEBYSCORE, key, min.getBytes(), max.getBytes()); } public void zrevrangeByScore(final byte[] key, final double max, - final double min) { + final double min) { - byte byteArrayMin[] = (min == Double.NEGATIVE_INFINITY) ? "-inf".getBytes() : toByteArray(min); - byte byteArrayMax[] = (max == Double.POSITIVE_INFINITY) ? "+inf".getBytes() : toByteArray(max); + byte byteArrayMin[] = (min == Double.NEGATIVE_INFINITY) ? "-inf" + .getBytes() : toByteArray(min); + byte byteArrayMax[] = (max == Double.POSITIVE_INFINITY) ? "+inf" + .getBytes() : toByteArray(max); - sendCommand(ZREVRANGEBYSCORE, key, byteArrayMax, byteArrayMin); + sendCommand(ZREVRANGEBYSCORE, key, byteArrayMax, byteArrayMin); } public void zrevrangeByScore(final byte[] key, final byte[] max, @@ -596,114 +620,125 @@ public class BinaryClient extends Connection { } public void zrevrangeByScore(final byte[] key, final String max, - final String min) { - sendCommand(ZREVRANGEBYSCORE, key, max.getBytes(), min.getBytes()); + final String min) { + sendCommand(ZREVRANGEBYSCORE, key, max.getBytes(), min.getBytes()); } public void zrangeByScore(final byte[] key, final double min, - final double max, final int offset, int count) { + final double max, final int offset, int count) { - byte byteArrayMin[] = (min == Double.NEGATIVE_INFINITY) ? "-inf".getBytes() : toByteArray(min); - byte byteArrayMax[] = (max == Double.POSITIVE_INFINITY) ? "+inf".getBytes() : toByteArray(max); + byte byteArrayMin[] = (min == Double.NEGATIVE_INFINITY) ? "-inf" + .getBytes() : toByteArray(min); + byte byteArrayMax[] = (max == Double.POSITIVE_INFINITY) ? "+inf" + .getBytes() : toByteArray(max); - sendCommand(ZRANGEBYSCORE, key, byteArrayMin, byteArrayMax, - LIMIT.raw, toByteArray(offset), toByteArray(count)); + sendCommand(ZRANGEBYSCORE, key, byteArrayMin, byteArrayMax, LIMIT.raw, + toByteArray(offset), toByteArray(count)); } - - public void zrangeByScore(final byte[] key, final String min, - final String max, final int offset, int count) { - sendCommand(ZRANGEBYSCORE, key, min.getBytes(), max.getBytes(), - LIMIT.raw, toByteArray(offset), toByteArray(count)); + public void zrangeByScore(final byte[] key, final String min, + final String max, final int offset, int count) { + + sendCommand(ZRANGEBYSCORE, key, min.getBytes(), max.getBytes(), + LIMIT.raw, toByteArray(offset), toByteArray(count)); } public void zrevrangeByScore(final byte[] key, final double max, - final double min, final int offset, int count) { + final double min, final int offset, int count) { - byte byteArrayMin[] = (min == Double.NEGATIVE_INFINITY) ? "-inf".getBytes() : toByteArray(min); - byte byteArrayMax[] = (max == Double.POSITIVE_INFINITY) ? "+inf".getBytes() : toByteArray(max); + byte byteArrayMin[] = (min == Double.NEGATIVE_INFINITY) ? "-inf" + .getBytes() : toByteArray(min); + byte byteArrayMax[] = (max == Double.POSITIVE_INFINITY) ? "+inf" + .getBytes() : toByteArray(max); - sendCommand(ZREVRANGEBYSCORE, key, byteArrayMax, byteArrayMin, - LIMIT.raw, toByteArray(offset), toByteArray(count)); - } + sendCommand(ZREVRANGEBYSCORE, key, byteArrayMax, byteArrayMin, + LIMIT.raw, toByteArray(offset), toByteArray(count)); + } public void zrevrangeByScore(final byte[] key, final String max, - final String min, final int offset, int count) { + final String min, final int offset, int count) { - sendCommand(ZREVRANGEBYSCORE, key, max.getBytes(), min.getBytes(), - LIMIT.raw, toByteArray(offset), toByteArray(count)); + sendCommand(ZREVRANGEBYSCORE, key, max.getBytes(), min.getBytes(), + LIMIT.raw, toByteArray(offset), toByteArray(count)); } public void zrangeByScoreWithScores(final byte[] key, final double min, - final double max) { + final double max) { - byte byteArrayMin[] = (min == Double.NEGATIVE_INFINITY) ? "-inf".getBytes() : toByteArray(min); - byte byteArrayMax[] = (max == Double.POSITIVE_INFINITY) ? "+inf".getBytes() : toByteArray(max); + byte byteArrayMin[] = (min == Double.NEGATIVE_INFINITY) ? "-inf" + .getBytes() : toByteArray(min); + byte byteArrayMax[] = (max == Double.POSITIVE_INFINITY) ? "+inf" + .getBytes() : toByteArray(max); - sendCommand(ZRANGEBYSCORE, key, byteArrayMin, byteArrayMax, - WITHSCORES.raw); + sendCommand(ZRANGEBYSCORE, key, byteArrayMin, byteArrayMax, + WITHSCORES.raw); } public void zrangeByScoreWithScores(final byte[] key, final String min, - final String max) { + final String max) { - sendCommand(ZRANGEBYSCORE, key, min.getBytes(), max.getBytes(), - WITHSCORES.raw); + sendCommand(ZRANGEBYSCORE, key, min.getBytes(), max.getBytes(), + WITHSCORES.raw); } public void zrevrangeByScoreWithScores(final byte[] key, final double max, - final double min) { + final double min) { - byte byteArrayMin[] = (min == Double.NEGATIVE_INFINITY) ? "-inf".getBytes() : toByteArray(min); - byte byteArrayMax[] = (max == Double.POSITIVE_INFINITY) ? "+inf".getBytes() : toByteArray(max); + byte byteArrayMin[] = (min == Double.NEGATIVE_INFINITY) ? "-inf" + .getBytes() : toByteArray(min); + byte byteArrayMax[] = (max == Double.POSITIVE_INFINITY) ? "+inf" + .getBytes() : toByteArray(max); - sendCommand(ZREVRANGEBYSCORE, key, byteArrayMax, byteArrayMin, - WITHSCORES.raw); + sendCommand(ZREVRANGEBYSCORE, key, byteArrayMax, byteArrayMin, + WITHSCORES.raw); } public void zrevrangeByScoreWithScores(final byte[] key, final String max, - final String min) { - sendCommand(ZREVRANGEBYSCORE, key, max.getBytes(), min.getBytes(), - WITHSCORES.raw); + final String min) { + sendCommand(ZREVRANGEBYSCORE, key, max.getBytes(), min.getBytes(), + WITHSCORES.raw); } public void zrangeByScoreWithScores(final byte[] key, final double min, - final double max, final int offset, final int count) { + final double max, final int offset, final int count) { - byte byteArrayMin[] = (min == Double.NEGATIVE_INFINITY) ? "-inf".getBytes() : toByteArray(min); - byte byteArrayMax[] = (max == Double.POSITIVE_INFINITY) ? "+inf".getBytes() : toByteArray(max); + byte byteArrayMin[] = (min == Double.NEGATIVE_INFINITY) ? "-inf" + .getBytes() : toByteArray(min); + byte byteArrayMax[] = (max == Double.POSITIVE_INFINITY) ? "+inf" + .getBytes() : toByteArray(max); - sendCommand(ZRANGEBYSCORE, key, byteArrayMin, byteArrayMax, - LIMIT.raw, toByteArray(offset), toByteArray(count), - WITHSCORES.raw); + sendCommand(ZRANGEBYSCORE, key, byteArrayMin, byteArrayMax, LIMIT.raw, + toByteArray(offset), toByteArray(count), WITHSCORES.raw); } public void zrangeByScoreWithScores(final byte[] key, final String min, - final String max, final int offset, final int count) { - sendCommand(ZRANGEBYSCORE, key, min.getBytes(), max.getBytes(), - LIMIT.raw, toByteArray(offset), toByteArray(count), - WITHSCORES.raw); + final String max, final int offset, final int count) { + sendCommand(ZRANGEBYSCORE, key, min.getBytes(), max.getBytes(), + LIMIT.raw, toByteArray(offset), toByteArray(count), + WITHSCORES.raw); } public void zrevrangeByScoreWithScores(final byte[] key, final double max, - final double min, final int offset, final int count) { + final double min, final int offset, final int count) { - byte byteArrayMin[] = (min == Double.NEGATIVE_INFINITY) ? "-inf".getBytes() : toByteArray(min); - byte byteArrayMax[] = (max == Double.POSITIVE_INFINITY) ? "+inf".getBytes() : toByteArray(max); + byte byteArrayMin[] = (min == Double.NEGATIVE_INFINITY) ? "-inf" + .getBytes() : toByteArray(min); + byte byteArrayMax[] = (max == Double.POSITIVE_INFINITY) ? "+inf" + .getBytes() : toByteArray(max); - sendCommand(ZREVRANGEBYSCORE, key, byteArrayMax, byteArrayMin, - LIMIT.raw, toByteArray(offset), toByteArray(count), - WITHSCORES.raw); + sendCommand(ZREVRANGEBYSCORE, key, byteArrayMax, byteArrayMin, + LIMIT.raw, toByteArray(offset), toByteArray(count), + WITHSCORES.raw); } public void zrevrangeByScoreWithScores(final byte[] key, final String max, - final String min, final int offset, final int count) { + final String min, final int offset, final int count) { - sendCommand(ZREVRANGEBYSCORE, key, max.getBytes(), min.getBytes(), - LIMIT.raw, toByteArray(offset), toByteArray(count), - WITHSCORES.raw); + sendCommand(ZREVRANGEBYSCORE, key, max.getBytes(), min.getBytes(), + LIMIT.raw, toByteArray(offset), toByteArray(count), + WITHSCORES.raw); } - + public void zrangeByScore(final byte[] key, final byte[] min, final byte[] max, final int offset, int count) { sendCommand(ZRANGEBYSCORE, key, min, max, LIMIT.raw, @@ -746,11 +781,11 @@ public class BinaryClient extends Connection { public void zremrangeByScore(final byte[] key, final byte[] start, final byte[] end) { sendCommand(ZREMRANGEBYSCORE, key, start, end); - } + } public void zremrangeByScore(final byte[] key, final String start, - final String end) { - sendCommand(ZREMRANGEBYSCORE, key, start.getBytes(), end.getBytes()); + final String end) { + sendCommand(ZREMRANGEBYSCORE, key, start.getBytes(), end.getBytes()); } public void zunionstore(final byte[] dstkey, final byte[]... sets) { @@ -816,7 +851,7 @@ public class BinaryClient extends Connection { public void info() { sendCommand(INFO); } - + public void info(final String section) { sendCommand(INFO, section); } @@ -888,7 +923,7 @@ public class BinaryClient extends Connection { } public void setbit(byte[] key, long offset, boolean value) { - sendCommand(SETBIT, key, toByteArray(offset), toByteArray(value)); + sendCommand(SETBIT, key, toByteArray(offset), toByteArray(value)); } public void getbit(byte[] key, long offset) { @@ -913,6 +948,14 @@ public class BinaryClient extends Connection { super.disconnect(); } + public void resetState() { + if (isInMulti()) + discard(); + + if (isInWatch()) + unwatch(); + } + private void sendEvalCommand(Command command, byte[] script, byte[] keyCount, byte[][] params) { @@ -932,7 +975,7 @@ public class BinaryClient extends Connection { } public void eval(byte[] script, int keyCount, byte[]... params) { - eval(script, toByteArray(keyCount), params); + eval(script, toByteArray(keyCount), params); } public void evalsha(byte[] sha1, byte[] keyCount, byte[]... params) { @@ -940,7 +983,7 @@ public class BinaryClient extends Connection { } public void evalsha(byte[] sha1, int keyCount, byte[]... params) { - sendEvalCommand(EVALSHA, sha1, toByteArray(keyCount), params); + sendEvalCommand(EVALSHA, sha1, toByteArray(keyCount), params); } public void scriptFlush() { @@ -993,111 +1036,160 @@ public class BinaryClient extends Connection { } public void bitcount(byte[] key) { - sendCommand(BITCOUNT, key); + sendCommand(BITCOUNT, key); } public void bitcount(byte[] key, long start, long end) { - sendCommand(BITCOUNT, key, toByteArray(start), toByteArray(end)); + sendCommand(BITCOUNT, key, toByteArray(start), toByteArray(end)); } public void bitop(BitOP op, byte[] destKey, byte[]... srcKeys) { - Keyword kw = Keyword.AND; - int len = srcKeys.length; - switch (op) { - case AND: - kw = Keyword.AND; - break; - case OR: - kw = Keyword.OR; - break; - case XOR: - kw = Keyword.XOR; - break; - case NOT: - kw = Keyword.NOT; - len = Math.min(1, len); - break; - } + Keyword kw = Keyword.AND; + int len = srcKeys.length; + switch (op) { + case AND: + kw = Keyword.AND; + break; + case OR: + kw = Keyword.OR; + break; + case XOR: + kw = Keyword.XOR; + break; + case NOT: + kw = Keyword.NOT; + len = Math.min(1, len); + break; + } - byte[][] bargs = new byte[len + 2][]; - bargs[0] = kw.raw; - bargs[1] = destKey; - for (int i = 0; i < len; ++i) { - bargs[i + 2] = srcKeys[i]; - } + byte[][] bargs = new byte[len + 2][]; + bargs[0] = kw.raw; + bargs[1] = destKey; + for (int i = 0; i < len; ++i) { + bargs[i + 2] = srcKeys[i]; + } - sendCommand(BITOP, bargs); + sendCommand(BITOP, bargs); } public void sentinel(final byte[]... args) { - sendCommand(SENTINEL, args); + sendCommand(SENTINEL, args); } - + public void dump(final byte[] key) { - sendCommand(DUMP, key); + sendCommand(DUMP, key); } - - public void restore(final byte[] key, final int ttl, final byte[] serializedValue) { - sendCommand(RESTORE, key, toByteArray(ttl), serializedValue); + + public void restore(final byte[] key, final int ttl, + final byte[] serializedValue) { + sendCommand(RESTORE, key, toByteArray(ttl), serializedValue); } - + public void pexpire(final byte[] key, final int milliseconds) { - sendCommand(PEXPIRE, key, toByteArray(milliseconds)); + sendCommand(PEXPIRE, key, toByteArray(milliseconds)); } - + public void pexpireAt(final byte[] key, final long millisecondsTimestamp) { - sendCommand(PEXPIREAT, key, toByteArray(millisecondsTimestamp)); + sendCommand(PEXPIREAT, key, toByteArray(millisecondsTimestamp)); } - + public void pttl(final byte[] key) { - sendCommand(PTTL, key); + sendCommand(PTTL, key); } - + public void incrByFloat(final byte[] key, final double increment) { - sendCommand(INCRBYFLOAT, key, toByteArray(increment)); + sendCommand(INCRBYFLOAT, key, toByteArray(increment)); } - - public void psetex(final byte[] key, final int milliseconds, final byte[] value) { - sendCommand(PSETEX, key, toByteArray(milliseconds), value); + + public void psetex(final byte[] key, final int milliseconds, + final byte[] value) { + sendCommand(PSETEX, key, toByteArray(milliseconds), value); } - + public void set(final byte[] key, final byte[] value, final byte[] nxxx) { - sendCommand(Command.SET, key, value, nxxx); + sendCommand(Command.SET, key, value, nxxx); } - - public void set(final byte[] key, final byte[] value, final byte[] nxxx, final byte[] expx, final int time) { - sendCommand(Command.SET, key, value, nxxx, expx, toByteArray(time)); + + public void set(final byte[] key, final byte[] value, final byte[] nxxx, + final byte[] expx, final int time) { + sendCommand(Command.SET, key, value, nxxx, expx, toByteArray(time)); } - + public void srandmember(final byte[] key, final int count) { - sendCommand(SRANDMEMBER, key, toByteArray(count)); + sendCommand(SRANDMEMBER, key, toByteArray(count)); } - + public void clientKill(final byte[] client) { - sendCommand(CLIENT, Keyword.KILL.raw, client); + sendCommand(CLIENT, Keyword.KILL.raw, client); } - + public void clientGetname() { - sendCommand(CLIENT, Keyword.GETNAME.raw); + sendCommand(CLIENT, Keyword.GETNAME.raw); } - + public void clientList() { - sendCommand(CLIENT, Keyword.LIST.raw); + sendCommand(CLIENT, Keyword.LIST.raw); } - + public void clientSetname(final byte[] name) { - sendCommand(CLIENT, Keyword.SETNAME.raw, name); + sendCommand(CLIENT, Keyword.SETNAME.raw, name); } - + public void time() { - sendCommand(TIME); + sendCommand(TIME); } - - public void migrate(final byte[] host, final int port, final byte[] key, final int destinationDb, final int timeout) { - sendCommand(MIGRATE, host, toByteArray(port), key, toByteArray(destinationDb), toByteArray(timeout)); + + public void migrate(final byte[] host, final int port, final byte[] key, + final int destinationDb, final int timeout) { + sendCommand(MIGRATE, host, toByteArray(port), key, + toByteArray(destinationDb), toByteArray(timeout)); } - - public void hincrByFloat(final byte[] key, final byte[] field, double increment) { - sendCommand(HINCRBYFLOAT, key, field, toByteArray(increment)); + + public void hincrByFloat(final byte[] key, final byte[] field, + double increment) { + sendCommand(HINCRBYFLOAT, key, field, toByteArray(increment)); + } + + public void scan(int cursor, final ScanParams params) { + final List args = new ArrayList(); + args.add(toByteArray(cursor)); + args.addAll(params.getParams()); + sendCommand(SCAN, args.toArray(new byte[args.size()][])); + } + + public void hscan(final byte[] key, int cursor, final ScanParams params) { + final List args = new ArrayList(); + args.add(key); + args.add(toByteArray(cursor)); + args.addAll(params.getParams()); + sendCommand(HSCAN, args.toArray(new byte[args.size()][])); + } + + public void sscan(final byte[] key, int cursor, final ScanParams params) { + final List args = new ArrayList(); + args.add(key); + args.add(toByteArray(cursor)); + args.addAll(params.getParams()); + sendCommand(SSCAN, args.toArray(new byte[args.size()][])); + } + + public void zscan(final byte[] key, int cursor, final ScanParams params) { + final List args = new ArrayList(); + args.add(key); + args.add(toByteArray(cursor)); + args.addAll(params.getParams()); + sendCommand(ZSCAN, args.toArray(new byte[args.size()][])); + } + + public void waitReplicas(int replicas, long timeout) { + sendCommand(WAIT, toByteArray(replicas), toByteArray(timeout)); + } + + public void cluster(final byte[]... args) { + sendCommand(CLUSTER, args); + } + + public void asking() { + sendCommand(Command.ASKING); } } diff --git a/src/main/java/redis/clients/jedis/BinaryJedis.java b/src/main/java/redis/clients/jedis/BinaryJedis.java index 385b1c0..991d046 100644 --- a/src/main/java/redis/clients/jedis/BinaryJedis.java +++ b/src/main/java/redis/clients/jedis/BinaryJedis.java @@ -1,17 +1,25 @@ package redis.clients.jedis; +import static redis.clients.jedis.Protocol.toByteArray; + +import java.net.URI; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + import redis.clients.jedis.BinaryClient.LIST_POSITION; import redis.clients.jedis.exceptions.JedisDataException; import redis.clients.jedis.exceptions.JedisException; import redis.clients.util.JedisByteHashMap; import redis.clients.util.SafeEncoder; -import java.net.URI; -import java.util.*; - -import static redis.clients.jedis.Protocol.toByteArray; - -public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKeyBinaryCommands, AdvancedBinaryJedisCommands, BinaryScriptingCommands { +public class BinaryJedis implements BasicCommands, BinaryJedisCommands, + MultiKeyBinaryCommands, AdvancedBinaryJedisCommands, + BinaryScriptingCommands { protected Client client = null; public BinaryJedis(final String host) { @@ -75,18 +83,23 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey /** * Set the string value as value of the key. The string can't be longer than * 1073741824 bytes (1 GB). + * * @param key * @param value - * @param nxxx NX|XX, NX -- Only set the key if it does not already exist. - * XX -- Only set the key if it already exist. - * @param expx EX|PX, expire time units: EX = seconds; PX = milliseconds - * @param time expire time in the units of {@param #expx} + * @param nxxx + * NX|XX, NX -- Only set the key if it does not already exist. XX + * -- Only set the key if it already exist. + * @param expx + * EX|PX, expire time units: EX = seconds; PX = milliseconds + * @param time + * expire time in the units of {@param #expx} * @return Status code reply */ - public String set(final byte[] key, final byte[] value, final byte[] nxxx, final byte[] expx, final long time) { - checkIsInMulti(); - client.set(key, value, nxxx, expx, time); - return client.getStatusCodeReply(); + public String set(final byte[] key, final byte[] value, final byte[] nxxx, + final byte[] expx, final long time) { + checkIsInMulti(); + client.set(key, value, nxxx, expx, time); + return client.getStatusCodeReply(); } /** @@ -147,9 +160,9 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey } public Long del(final byte[] key) { - checkIsInMulti(); - client.del(key); - return client.getIntegerReply(); + checkIsInMulti(); + client.del(key); + return client.getIntegerReply(); } /** @@ -1006,7 +1019,8 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey * @return Multi bulk reply, specifically a list of elements in the * specified range. */ - public List lrange(final byte[] key, final long start, final long end) { + public List lrange(final byte[] key, final long start, + final long end) { checkIsInMulti(); client.lrange(key, start, end); return client.getBinaryMultiBulkReply(); @@ -1468,11 +1482,11 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey client.srandmember(key); return client.getBinaryBulkReply(); } - + public List srandmember(final byte[] key, final int count) { - checkIsInMulti(); - client.srandmember(key, count); - return client.getBinaryMultiBulkReply(); + checkIsInMulti(); + client.srandmember(key, count); + return client.getBinaryMultiBulkReply(); } /** @@ -1502,7 +1516,7 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey return client.getIntegerReply(); } - public Long zadd(final byte[] key, final Map scoreMembers) { + public Long zadd(final byte[] key, final Map scoreMembers) { checkIsInMulti(); client.zaddBinary(key, scoreMembers); return client.getIntegerReply(); @@ -1685,13 +1699,9 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey public List multi(final TransactionBlock jedisTransaction) { List results = null; jedisTransaction.setClient(client); - try { - client.multi(); - jedisTransaction.execute(); - results = jedisTransaction.exec(); - } catch (Exception ex) { - jedisTransaction.discard(); - } + client.multi(); + jedisTransaction.execute(); + results = jedisTransaction.exec(); return results; } @@ -1710,6 +1720,11 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey client.disconnect(); } + public void resetState() { + client.resetState(); + client.getAll(); + } + public String watch(final byte[]... keys) { client.watch(keys); return client.getStatusCodeReply(); @@ -2044,43 +2059,43 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey } public List blpop(byte[] arg) { - checkIsInMulti(); - byte[][] args = new byte[1][]; - args[0] = arg; - client.blpop(args); - client.setTimeoutInfinite(); - final List multiBulkReply = client.getBinaryMultiBulkReply(); - client.rollbackTimeout(); - return multiBulkReply; + checkIsInMulti(); + byte[][] args = new byte[1][]; + args[0] = arg; + client.blpop(args); + client.setTimeoutInfinite(); + final List multiBulkReply = client.getBinaryMultiBulkReply(); + client.rollbackTimeout(); + return multiBulkReply; } public List brpop(byte[] arg) { - checkIsInMulti(); - byte[][] args = new byte[1][]; - args[0] = arg; - client.brpop(args); - client.setTimeoutInfinite(); - final List multiBulkReply = client.getBinaryMultiBulkReply(); - client.rollbackTimeout(); - return multiBulkReply; + checkIsInMulti(); + byte[][] args = new byte[1][]; + args[0] = arg; + client.brpop(args); + client.setTimeoutInfinite(); + final List multiBulkReply = client.getBinaryMultiBulkReply(); + client.rollbackTimeout(); + return multiBulkReply; } public List blpop(byte[]... args) { - checkIsInMulti(); - client.blpop(args); - client.setTimeoutInfinite(); - final List multiBulkReply = client.getBinaryMultiBulkReply(); - client.rollbackTimeout(); - return multiBulkReply; + checkIsInMulti(); + client.blpop(args); + client.setTimeoutInfinite(); + final List multiBulkReply = client.getBinaryMultiBulkReply(); + client.rollbackTimeout(); + return multiBulkReply; } public List brpop(byte[]... args) { - checkIsInMulti(); - client.brpop(args); - client.setTimeoutInfinite(); - final List multiBulkReply = client.getBinaryMultiBulkReply(); - client.rollbackTimeout(); - return multiBulkReply; + checkIsInMulti(); + client.brpop(args); + client.setTimeoutInfinite(); + final List multiBulkReply = client.getBinaryMultiBulkReply(); + client.rollbackTimeout(); + return multiBulkReply; } /** @@ -2126,15 +2141,15 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey } public Long zcount(final byte[] key, final double min, final double max) { - return zcount(key, toByteArray(min), toByteArray(max)); + return zcount(key, toByteArray(min), toByteArray(max)); } - + public Long zcount(final byte[] key, final byte[] min, final byte[] max) { - checkIsInMulti(); - client.zcount(key, min, max); - return client.getIntegerReply(); + checkIsInMulti(); + client.zcount(key, min, max); + return client.getIntegerReply(); } - + /** * Return the all the elements in the sorted set at key with a score between * min and max (including elements with score equal to min or max). @@ -2194,7 +2209,7 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey public Set zrangeByScore(final byte[] key, final double min, final double max) { return zrangeByScore(key, toByteArray(min), toByteArray(max)); - } + } public Set zrangeByScore(final byte[] key, final byte[] min, final byte[] max) { @@ -2261,15 +2276,16 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey */ public Set zrangeByScore(final byte[] key, final double min, final double max, final int offset, final int count) { - return zrangeByScore(key, toByteArray(min),toByteArray(max),offset, count); + return zrangeByScore(key, toByteArray(min), toByteArray(max), offset, + count); } - + public Set zrangeByScore(final byte[] key, final byte[] min, - final byte[] max, final int offset, final int count) { - checkIsInMulti(); - client.zrangeByScore(key, min, max, offset, count); - return new LinkedHashSet(client.getBinaryMultiBulkReply()); - } + final byte[] max, final int offset, final int count) { + checkIsInMulti(); + client.zrangeByScore(key, min, max, offset, count); + return new LinkedHashSet(client.getBinaryMultiBulkReply()); + } /** * Return the all the elements in the sorted set at key with a score between @@ -2331,14 +2347,14 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey final double min, final double max) { return zrangeByScoreWithScores(key, toByteArray(min), toByteArray(max)); } - + public Set zrangeByScoreWithScores(final byte[] key, - final byte[] min, final byte[] max) { - checkIsInMulti(); - client.zrangeByScoreWithScores(key, min, max); - Set set = getBinaryTupledSet(); - return set; - } + final byte[] min, final byte[] max) { + checkIsInMulti(); + client.zrangeByScoreWithScores(key, min, max); + Set set = getBinaryTupledSet(); + return set; + } /** * Return the all the elements in the sorted set at key with a score between @@ -2399,17 +2415,18 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey public Set zrangeByScoreWithScores(final byte[] key, final double min, final double max, final int offset, final int count) { - return zrangeByScoreWithScores(key, toByteArray(min), toByteArray(max), offset, count); + return zrangeByScoreWithScores(key, toByteArray(min), toByteArray(max), + offset, count); } - + public Set zrangeByScoreWithScores(final byte[] key, - final byte[] min, final byte[] max, final int offset, - final int count) { - checkIsInMulti(); - client.zrangeByScoreWithScores(key, min, max, offset, count); - Set set = getBinaryTupledSet(); - return set; - } + final byte[] min, final byte[] max, final int offset, + final int count) { + checkIsInMulti(); + client.zrangeByScoreWithScores(key, min, max, offset, count); + Set set = getBinaryTupledSet(); + return set; + } private Set getBinaryTupledSet() { checkIsInMulti(); @@ -2437,29 +2454,32 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey public Set zrevrangeByScore(final byte[] key, final double max, final double min, final int offset, final int count) { - return zrevrangeByScore(key, toByteArray(max), toByteArray(min), offset, count); + return zrevrangeByScore(key, toByteArray(max), toByteArray(min), + offset, count); } - + public Set zrevrangeByScore(final byte[] key, final byte[] max, - final byte[] min, final int offset, final int count) { - checkIsInMulti(); - client.zrevrangeByScore(key, max, min, offset, count); - return new LinkedHashSet(client.getBinaryMultiBulkReply()); - } + final byte[] min, final int offset, final int count) { + checkIsInMulti(); + client.zrevrangeByScore(key, max, min, offset, count); + return new LinkedHashSet(client.getBinaryMultiBulkReply()); + } public Set zrevrangeByScoreWithScores(final byte[] key, final double max, final double min) { - return zrevrangeByScoreWithScores(key, toByteArray(max), toByteArray(min)); + return zrevrangeByScoreWithScores(key, toByteArray(max), + toByteArray(min)); } public Set zrevrangeByScoreWithScores(final byte[] key, final double max, final double min, final int offset, final int count) { - return zrevrangeByScoreWithScores(key, toByteArray(max), toByteArray(min), offset, count); + return zrevrangeByScoreWithScores(key, toByteArray(max), + toByteArray(min), offset, count); } - + public Set zrevrangeByScoreWithScores(final byte[] key, - final byte[] max, final byte[] min) { + final byte[] max, final byte[] min) { checkIsInMulti(); client.zrevrangeByScoreWithScores(key, max, min); Set set = getBinaryTupledSet(); @@ -2473,7 +2493,7 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey client.zrevrangeByScoreWithScores(key, max, min, offset, count); Set set = getBinaryTupledSet(); return set; - } + } /** * Remove all elements in the sorted set at key with rank between start and @@ -2488,7 +2508,8 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey * operation * */ - public Long zremrangeByRank(final byte[] key, final long start, final long end) { + public Long zremrangeByRank(final byte[] key, final long start, + final long end) { checkIsInMulti(); client.zremrangeByRank(key, start, end); return client.getIntegerReply(); @@ -2512,13 +2533,13 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey final double end) { return zremrangeByScore(key, toByteArray(start), toByteArray(end)); } - + public Long zremrangeByScore(final byte[] key, final byte[] start, - final byte[] end) { - checkIsInMulti(); - client.zremrangeByScore(key, start, end); - return client.getIntegerReply(); - } + final byte[] end) { + checkIsInMulti(); + client.zremrangeByScore(key, start, end); + return client.getIntegerReply(); + } /** * Creates a union or intersection of N sorted sets given by keys k1 through @@ -2842,7 +2863,7 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey client.info(); return client.getBulkReply(); } - + public String info(final String section) { client.info(section); return client.getBulkReply(); @@ -2860,6 +2881,7 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey */ public void monitor(final JedisMonitor jedisMonitor) { client.monitor(); + client.getStatusCodeReply(); jedisMonitor.proceed(client); } @@ -3077,8 +3099,8 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey } public Boolean setbit(byte[] key, long offset, byte[] value) { - client.setbit(key, offset, value); - return client.getIntegerReply() == 1; + client.setbit(key, offset, value); + return client.getIntegerReply() == 1; } /** @@ -3139,12 +3161,13 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey private byte[][] getParams(List keys, List args) { int keyCount = keys.size(); + int argCount = args.size(); byte[][] params = new byte[keyCount + args.size()][]; for (int i = 0; i < keyCount; i++) params[i] = keys.get(i); - for (int i = 0; i < keys.size(); i++) + for (int i = 0; i < argCount; i++) params[keyCount + i] = args.get(i); return params; @@ -3157,44 +3180,44 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey } public Object eval(byte[] script, int keyCount, byte[]... params) { - client.setTimeoutInfinite(); - client.eval(script, SafeEncoder.encode(Integer.toString(keyCount)), params); - return client.getOne(); + client.setTimeoutInfinite(); + client.eval(script, SafeEncoder.encode(Integer.toString(keyCount)), + params); + return client.getOne(); } public Object eval(byte[] script) { - client.setTimeoutInfinite(); - client.eval(script, 0); - return client.getOne(); + client.setTimeoutInfinite(); + client.eval(script, 0); + return client.getOne(); } public Object evalsha(byte[] sha1) { - client.setTimeoutInfinite(); - client.evalsha(sha1, 0); - return client.getOne(); + client.setTimeoutInfinite(); + client.evalsha(sha1, 0); + return client.getOne(); } - - public Object evalsha(byte[] sha1, List keys, List args) { - int keyCount = keys == null ? 0 : keys.size(); - int argCount = args == null ? 0 : args.size(); + public Object evalsha(byte[] sha1, List keys, List args) { - byte[][] params = new byte[keyCount + argCount][]; + int keyCount = keys == null ? 0 : keys.size(); + int argCount = args == null ? 0 : args.size(); - for (int i = 0; i < keyCount; i++) - params[i] = keys.get(i); + byte[][] params = new byte[keyCount + argCount][]; - for (int i = 0; i < argCount; i++) - params[keyCount + i] = args.get(i); + for (int i = 0; i < keyCount; i++) + params[i] = keys.get(i); + for (int i = 0; i < argCount; i++) + params[keyCount + i] = args.get(i); - return evalsha(sha1, keyCount, params); - } + return evalsha(sha1, keyCount, params); + } public Object evalsha(byte[] sha1, int keyCount, byte[]... params) { - client.setTimeoutInfinite(); - client.evalsha(sha1, keyCount, params); - return client.getOne(); + client.setTimeoutInfinite(); + client.evalsha(sha1, keyCount, params); + return client.getOne(); } public String scriptFlush() { @@ -3204,7 +3227,7 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey public List scriptExists(byte[]... sha1) { client.scriptExists(sha1); - return client.getIntegerMultiBulkReply(); + return client.getIntegerMultiBulkReply(); } public byte[] scriptLoad(byte[] script) { @@ -3236,133 +3259,151 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey client.slowlogGet(entries); return client.getBinaryMultiBulkReply(); } - - public Long objectRefcount(byte[] key) { - client.objectRefcount(key); - return client.getIntegerReply(); - } - - public byte[] objectEncoding(byte[] key) { - client.objectEncoding(key); - return client.getBinaryBulkReply(); - } - public Long objectIdletime(byte[] key) { - client.objectIdletime(key); - return client.getIntegerReply(); - } + public Long objectRefcount(byte[] key) { + client.objectRefcount(key); + return client.getIntegerReply(); + } + + public byte[] objectEncoding(byte[] key) { + client.objectEncoding(key); + return client.getBinaryBulkReply(); + } + + public Long objectIdletime(byte[] key) { + client.objectIdletime(key); + return client.getIntegerReply(); + } public Long bitcount(final byte[] key) { - client.bitcount(key); - return client.getIntegerReply(); + client.bitcount(key); + return client.getIntegerReply(); } public Long bitcount(final byte[] key, long start, long end) { - client.bitcount(key, start, end); - return client.getIntegerReply(); + client.bitcount(key, start, end); + return client.getIntegerReply(); } public Long bitop(BitOP op, final byte[] destKey, byte[]... srcKeys) { - client.bitop(op, destKey, srcKeys); - return client.getIntegerReply(); + client.bitop(op, destKey, srcKeys); + return client.getIntegerReply(); } - + public byte[] dump(final byte[] key) { - checkIsInMulti(); - client.dump(key); - return client.getBinaryBulkReply(); + checkIsInMulti(); + client.dump(key); + return client.getBinaryBulkReply(); } - - public String restore(final byte[] key, final int ttl, final byte[] serializedValue) { - checkIsInMulti(); - client.restore(key, ttl, serializedValue); - return client.getStatusCodeReply(); + + public String restore(final byte[] key, final int ttl, + final byte[] serializedValue) { + checkIsInMulti(); + client.restore(key, ttl, serializedValue); + return client.getStatusCodeReply(); } - + public Long pexpire(final byte[] key, final int milliseconds) { - checkIsInMulti(); - client.pexpire(key, milliseconds); - return client.getIntegerReply(); + checkIsInMulti(); + client.pexpire(key, milliseconds); + return client.getIntegerReply(); } - + public Long pexpireAt(final byte[] key, final long millisecondsTimestamp) { - checkIsInMulti(); - client.pexpireAt(key, millisecondsTimestamp); - return client.getIntegerReply(); + checkIsInMulti(); + client.pexpireAt(key, millisecondsTimestamp); + return client.getIntegerReply(); } - + public Long pttl(final byte[] key) { - checkIsInMulti(); - client.pttl(key); - return client.getIntegerReply(); + checkIsInMulti(); + client.pttl(key); + return client.getIntegerReply(); } - + public Double incrByFloat(final byte[] key, final double increment) { - checkIsInMulti(); - client.incrByFloat(key, increment); - String relpy = client.getBulkReply(); - return (relpy != null ? new Double(relpy) : null); + checkIsInMulti(); + client.incrByFloat(key, increment); + String relpy = client.getBulkReply(); + return (relpy != null ? new Double(relpy) : null); } - - public String psetex(final byte[] key, final int milliseconds, final byte[] value) { - checkIsInMulti(); - client.psetex(key, milliseconds, value); - return client.getStatusCodeReply(); + + public String psetex(final byte[] key, final int milliseconds, + final byte[] value) { + checkIsInMulti(); + client.psetex(key, milliseconds, value); + return client.getStatusCodeReply(); } - + public String set(final byte[] key, final byte[] value, final byte[] nxxx) { - checkIsInMulti(); - client.set(key, value, nxxx); - return client.getStatusCodeReply(); + checkIsInMulti(); + client.set(key, value, nxxx); + return client.getStatusCodeReply(); } - - public String set(final byte[] key, final byte[] value, final byte[] nxxx, final byte[] expx, final int time) { - checkIsInMulti(); - client.set(key, value, nxxx, expx, time); - return client.getStatusCodeReply(); + + public String set(final byte[] key, final byte[] value, final byte[] nxxx, + final byte[] expx, final int time) { + checkIsInMulti(); + client.set(key, value, nxxx, expx, time); + return client.getStatusCodeReply(); } - + public String clientKill(final byte[] client) { - checkIsInMulti(); - this.client.clientKill(client); - return this.client.getStatusCodeReply(); + checkIsInMulti(); + this.client.clientKill(client); + return this.client.getStatusCodeReply(); } - + public String clientGetname() { - checkIsInMulti(); - client.clientGetname(); - return client.getBulkReply(); + checkIsInMulti(); + client.clientGetname(); + return client.getBulkReply(); } - + public String clientList() { - checkIsInMulti(); - client.clientList(); - return client.getBulkReply(); + checkIsInMulti(); + client.clientList(); + return client.getBulkReply(); } - + public String clientSetname(final byte[] name) { - checkIsInMulti(); - client.clientSetname(name); - return client.getBulkReply(); + checkIsInMulti(); + client.clientSetname(name); + return client.getBulkReply(); } - + public List time() { - checkIsInMulti(); - client.time(); - return client.getMultiBulkReply(); + checkIsInMulti(); + client.time(); + return client.getMultiBulkReply(); } - - public String migrate(final byte[] host, final int port, final byte[] key, final int destinationDb, final int timeout) { - checkIsInMulti(); - client.migrate(host, port, key, destinationDb, timeout); - return client.getStatusCodeReply(); + + public String migrate(final byte[] host, final int port, final byte[] key, + final int destinationDb, final int timeout) { + checkIsInMulti(); + client.migrate(host, port, key, destinationDb, timeout); + return client.getStatusCodeReply(); } - - public Double hincrByFloat(final byte[] key, final byte[] field, double increment) { - checkIsInMulti(); - client.hincrByFloat(key, field, increment); - String relpy = client.getBulkReply(); - return (relpy != null ? new Double(relpy) : null); + + public Double hincrByFloat(final byte[] key, final byte[] field, + double increment) { + checkIsInMulti(); + client.hincrByFloat(key, field, increment); + String relpy = client.getBulkReply(); + return (relpy != null ? new Double(relpy) : null); + } + + /** + * Syncrhonous replication of Redis as described here: + * http://antirez.com/news/66 + * + * Since Java Object class has implemented "wait" method, we cannot use it, + * so I had to change the name of the method. Sorry :S + */ + public Long waitReplicas(int replicas, long timeout) { + checkIsInMulti(); + client.waitReplicas(replicas, timeout); + return client.getIntegerReply(); } } diff --git a/src/main/java/redis/clients/jedis/BinaryJedisCommands.java b/src/main/java/redis/clients/jedis/BinaryJedisCommands.java index 35e1879..b229f97 100644 --- a/src/main/java/redis/clients/jedis/BinaryJedisCommands.java +++ b/src/main/java/redis/clients/jedis/BinaryJedisCommands.java @@ -5,8 +5,6 @@ import java.util.List; import java.util.Map; import java.util.Set; -import redis.clients.jedis.BinaryClient.LIST_POSITION; - /** * Common interface for sharded and non-sharded BinaryJedis */ @@ -116,8 +114,8 @@ public interface BinaryJedisCommands { Long strlen(byte[] key); Long zadd(byte[] key, double score, byte[] member); - - Long zadd(byte[] key, Map scoreMembers); + + Long zadd(byte[] key, Map scoreMembers); Set zrange(byte[] key, long start, long end); @@ -159,45 +157,45 @@ public interface BinaryJedisCommands { Set zrevrangeByScore(byte[] key, byte[] max, byte[] min); Set zrangeByScore(byte[] key, byte[] min, byte[] max, int offset, - int count); + int count); Set zrevrangeByScore(byte[] key, double max, double min, - int offset, int count); + int offset, int count); Set zrangeByScoreWithScores(byte[] key, double min, double max); Set zrevrangeByScoreWithScores(byte[] key, double max, double min); Set zrangeByScoreWithScores(byte[] key, double min, double max, - int offset, int count); - + int offset, int count); + Set zrevrangeByScore(byte[] key, byte[] max, byte[] min, - int offset, int count); + int offset, int count); Set zrangeByScoreWithScores(byte[] key, byte[] min, byte[] max); - + Set zrevrangeByScoreWithScores(byte[] key, byte[] max, byte[] min); Set zrangeByScoreWithScores(byte[] key, byte[] min, byte[] max, - int offset, int count); + int offset, int count); Set zrevrangeByScoreWithScores(byte[] key, double max, double min, - int offset, int count); - + int offset, int count); + Set zrevrangeByScoreWithScores(byte[] key, byte[] max, byte[] min, - int offset, int count); + int offset, int count); Long zremrangeByRank(byte[] key, long start, long end); Long zremrangeByScore(byte[] key, double start, double end); - + Long zremrangeByScore(byte[] key, byte[] start, byte[] end); Long linsert(byte[] key, Client.LIST_POSITION where, byte[] pivot, - byte[] value); - + byte[] value); + Long lpushx(byte[] key, byte[]... arg); - + Long rpushx(byte[] key, byte[]... arg); List blpop(byte[] arg); diff --git a/src/main/java/redis/clients/jedis/BinaryJedisPubSub.java b/src/main/java/redis/clients/jedis/BinaryJedisPubSub.java index 9f34b4a..c271305 100644 --- a/src/main/java/redis/clients/jedis/BinaryJedisPubSub.java +++ b/src/main/java/redis/clients/jedis/BinaryJedisPubSub.java @@ -19,7 +19,7 @@ public abstract class BinaryJedisPubSub { public abstract void onMessage(byte[] channel, byte[] message); public abstract void onPMessage(byte[] pattern, byte[] channel, - byte[] message); + byte[] message); public abstract void onSubscribe(byte[] channel, int subscribedChannels); @@ -30,91 +30,91 @@ public abstract class BinaryJedisPubSub { public abstract void onPSubscribe(byte[] pattern, int subscribedChannels); public void unsubscribe() { - client.unsubscribe(); - client.flush(); + client.unsubscribe(); + client.flush(); } public void unsubscribe(byte[]... channels) { - client.unsubscribe(channels); - client.flush(); + client.unsubscribe(channels); + client.flush(); } public void subscribe(byte[]... channels) { - client.subscribe(channels); - client.flush(); + client.subscribe(channels); + client.flush(); } public void psubscribe(byte[]... patterns) { - client.psubscribe(patterns); - client.flush(); + client.psubscribe(patterns); + client.flush(); } public void punsubscribe() { - client.punsubscribe(); - client.flush(); + client.punsubscribe(); + client.flush(); } public void punsubscribe(byte[]... patterns) { - client.punsubscribe(patterns); - client.flush(); + client.punsubscribe(patterns); + client.flush(); } public boolean isSubscribed() { - return subscribedChannels > 0; + return subscribedChannels > 0; } public void proceedWithPatterns(Client client, byte[]... patterns) { - this.client = client; - client.psubscribe(patterns); - process(client); + this.client = client; + client.psubscribe(patterns); + process(client); } public void proceed(Client client, byte[]... channels) { - this.client = client; - client.subscribe(channels); - process(client); + this.client = client; + client.subscribe(channels); + process(client); } private void process(Client client) { - do { - List reply = client.getObjectMultiBulkReply(); - final Object firstObj = reply.get(0); - if (!(firstObj instanceof byte[])) { - throw new JedisException("Unknown message type: " + firstObj); - } - final byte[] resp = (byte[]) firstObj; - if (Arrays.equals(SUBSCRIBE.raw, resp)) { - subscribedChannels = ((Long) reply.get(2)).intValue(); - final byte[] bchannel = (byte[]) reply.get(1); - onSubscribe(bchannel, subscribedChannels); - } else if (Arrays.equals(UNSUBSCRIBE.raw, resp)) { - subscribedChannels = ((Long) reply.get(2)).intValue(); - final byte[] bchannel = (byte[]) reply.get(1); - onUnsubscribe(bchannel, subscribedChannels); - } else if (Arrays.equals(MESSAGE.raw, resp)) { - final byte[] bchannel = (byte[]) reply.get(1); - final byte[] bmesg = (byte[]) reply.get(2); - onMessage(bchannel, bmesg); - } else if (Arrays.equals(PMESSAGE.raw, resp)) { - final byte[] bpattern = (byte[]) reply.get(1); - final byte[] bchannel = (byte[]) reply.get(2); - final byte[] bmesg = (byte[]) reply.get(3); - onPMessage(bpattern, bchannel, bmesg); - } else if (Arrays.equals(PSUBSCRIBE.raw, resp)) { - subscribedChannels = ((Long) reply.get(2)).intValue(); - final byte[] bpattern = (byte[]) reply.get(1); - onPSubscribe(bpattern, subscribedChannels); - } else if (Arrays.equals(PUNSUBSCRIBE.raw, resp)) { - subscribedChannels = ((Long) reply.get(2)).intValue(); - final byte[] bpattern = (byte[]) reply.get(1); - onPUnsubscribe(bpattern, subscribedChannels); - } else { - throw new JedisException("Unknown message type: " + firstObj); - } - } while (isSubscribed()); + do { + List reply = client.getObjectMultiBulkReply(); + final Object firstObj = reply.get(0); + if (!(firstObj instanceof byte[])) { + throw new JedisException("Unknown message type: " + firstObj); + } + final byte[] resp = (byte[]) firstObj; + if (Arrays.equals(SUBSCRIBE.raw, resp)) { + subscribedChannels = ((Long) reply.get(2)).intValue(); + final byte[] bchannel = (byte[]) reply.get(1); + onSubscribe(bchannel, subscribedChannels); + } else if (Arrays.equals(UNSUBSCRIBE.raw, resp)) { + subscribedChannels = ((Long) reply.get(2)).intValue(); + final byte[] bchannel = (byte[]) reply.get(1); + onUnsubscribe(bchannel, subscribedChannels); + } else if (Arrays.equals(MESSAGE.raw, resp)) { + final byte[] bchannel = (byte[]) reply.get(1); + final byte[] bmesg = (byte[]) reply.get(2); + onMessage(bchannel, bmesg); + } else if (Arrays.equals(PMESSAGE.raw, resp)) { + final byte[] bpattern = (byte[]) reply.get(1); + final byte[] bchannel = (byte[]) reply.get(2); + final byte[] bmesg = (byte[]) reply.get(3); + onPMessage(bpattern, bchannel, bmesg); + } else if (Arrays.equals(PSUBSCRIBE.raw, resp)) { + subscribedChannels = ((Long) reply.get(2)).intValue(); + final byte[] bpattern = (byte[]) reply.get(1); + onPSubscribe(bpattern, subscribedChannels); + } else if (Arrays.equals(PUNSUBSCRIBE.raw, resp)) { + subscribedChannels = ((Long) reply.get(2)).intValue(); + final byte[] bpattern = (byte[]) reply.get(1); + onPUnsubscribe(bpattern, subscribedChannels); + } else { + throw new JedisException("Unknown message type: " + firstObj); + } + } while (isSubscribed()); } public int getSubscribedChannels() { - return subscribedChannels; + return subscribedChannels; } } \ No newline at end of file diff --git a/src/main/java/redis/clients/jedis/BinaryRedisPipeline.java b/src/main/java/redis/clients/jedis/BinaryRedisPipeline.java index d48800c..73037b7 100644 --- a/src/main/java/redis/clients/jedis/BinaryRedisPipeline.java +++ b/src/main/java/redis/clients/jedis/BinaryRedisPipeline.java @@ -67,7 +67,7 @@ public interface BinaryRedisPipeline { Response lindex(byte[] key, long index); Response linsert(byte[] key, BinaryClient.LIST_POSITION where, - byte[] pivot, byte[] value); + byte[] pivot, byte[] value); Response llen(byte[] key); @@ -117,8 +117,7 @@ public interface BinaryRedisPipeline { Response> sort(byte[] key); - Response> sort(byte[] key, - SortingParams sortingParameters); + Response> sort(byte[] key, SortingParams sortingParameters); Response spop(byte[] key); @@ -144,53 +143,49 @@ public interface BinaryRedisPipeline { Response> zrange(byte[] key, long start, long end); - Response> zrangeByScore(byte[] key, double min, - double max); + Response> zrangeByScore(byte[] key, double min, double max); - Response> zrangeByScore(byte[] key, byte[] min, - byte[] max); + Response> zrangeByScore(byte[] key, byte[] min, byte[] max); - Response> zrangeByScore(byte[] key, double min, - double max, int offset, int count); + Response> zrangeByScore(byte[] key, double min, double max, + int offset, int count); - Response> zrangeByScore(byte[] key, byte[] min, - byte[] max, int offset, int count); + Response> zrangeByScore(byte[] key, byte[] min, byte[] max, + int offset, int count); Response> zrangeByScoreWithScores(byte[] key, double min, - double max); + double max); Response> zrangeByScoreWithScores(byte[] key, byte[] min, - byte[] max); + byte[] max); Response> zrangeByScoreWithScores(byte[] key, double min, - double max, int offset, int count); + double max, int offset, int count); Response> zrangeByScoreWithScores(byte[] key, byte[] min, - byte[] max, int offset, int count); + byte[] max, int offset, int count); - Response> zrevrangeByScore(byte[] key, double max, - double min); + Response> zrevrangeByScore(byte[] key, double max, double min); - Response> zrevrangeByScore(byte[] key, byte[] max, - byte[] min); + Response> zrevrangeByScore(byte[] key, byte[] max, byte[] min); - Response> zrevrangeByScore(byte[] key, double max, - double min, int offset, int count); + Response> zrevrangeByScore(byte[] key, double max, double min, + int offset, int count); - Response> zrevrangeByScore(byte[] key, byte[] max, - byte[] min, int offset, int count); + Response> zrevrangeByScore(byte[] key, byte[] max, byte[] min, + int offset, int count); - Response> zrevrangeByScoreWithScores(byte[] key, - double max, double min); + Response> zrevrangeByScoreWithScores(byte[] key, double max, + double min); - Response> zrevrangeByScoreWithScores(byte[] key, - byte[] max, byte[] min); + Response> zrevrangeByScoreWithScores(byte[] key, byte[] max, + byte[] min); - Response> zrevrangeByScoreWithScores(byte[] key, - double max, double min, int offset, int count); + Response> zrevrangeByScoreWithScores(byte[] key, double max, + double min, int offset, int count); - Response> zrevrangeByScoreWithScores(byte[] key, - byte[] max, byte[] min, int offset, int count); + Response> zrevrangeByScoreWithScores(byte[] key, byte[] max, + byte[] min, int offset, int count); Response> zrangeWithScores(byte[] key, long start, long end); @@ -206,8 +201,7 @@ public interface BinaryRedisPipeline { Response> zrevrange(byte[] key, long start, long end); - Response> zrevrangeWithScores(byte[] key, long start, - long end); + Response> zrevrangeWithScores(byte[] key, long start, long end); Response zrevrank(byte[] key, byte[] member); diff --git a/src/main/java/redis/clients/jedis/BinaryScriptingCommands.java b/src/main/java/redis/clients/jedis/BinaryScriptingCommands.java index 092ce7a..face8d8 100644 --- a/src/main/java/redis/clients/jedis/BinaryScriptingCommands.java +++ b/src/main/java/redis/clients/jedis/BinaryScriptingCommands.java @@ -1,6 +1,5 @@ package redis.clients.jedis; - import java.util.List; public interface BinaryScriptingCommands { @@ -8,7 +7,7 @@ public interface BinaryScriptingCommands { Object eval(byte[] script, byte[] keyCount, byte[]... params); Object eval(byte[] script, int keyCount, byte[]... params); - + Object eval(byte[] script, List keys, List args); Object eval(byte[] script); diff --git a/src/main/java/redis/clients/jedis/BinaryShardedJedis.java b/src/main/java/redis/clients/jedis/BinaryShardedJedis.java index 2723aa1..382d48b 100644 --- a/src/main/java/redis/clients/jedis/BinaryShardedJedis.java +++ b/src/main/java/redis/clients/jedis/BinaryShardedJedis.java @@ -1,16 +1,15 @@ package redis.clients.jedis; -import redis.clients.jedis.BinaryClient.LIST_POSITION; -import redis.clients.util.Hashing; -import redis.clients.util.Sharded; - -import java.io.IOException; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; import java.util.regex.Pattern; +import redis.clients.jedis.BinaryClient.LIST_POSITION; +import redis.clients.util.Hashing; +import redis.clients.util.Sharded; + public class BinaryShardedJedis extends Sharded implements BinaryJedisCommands { public BinaryShardedJedis(List shards) { @@ -31,10 +30,10 @@ public class BinaryShardedJedis extends Sharded } public void disconnect() { - for (Jedis jedis : getAllShards()) { - jedis.quit(); - jedis.disconnect(); - } + for (Jedis jedis : getAllShards()) { + jedis.quit(); + jedis.disconnect(); + } } protected Jedis create(JedisShardInfo shard) { @@ -102,10 +101,10 @@ public class BinaryShardedJedis extends Sharded } public Long del(byte[] key) { - Jedis j = getShard(key); - return j.del(key); + Jedis j = getShard(key); + return j.del(key); } - + public Long incrBy(byte[] key, long integer) { Jedis j = getShard(key); return j.incrBy(key, integer); @@ -197,23 +196,23 @@ public class BinaryShardedJedis extends Sharded } public Long strlen(final byte[] key) { - Jedis j = getShard(key); - return j.strlen(key); + Jedis j = getShard(key); + return j.strlen(key); } public Long lpushx(byte[] key, byte[]... string) { - Jedis j = getShard(key); - return j.lpushx(key, string); + Jedis j = getShard(key); + return j.lpushx(key, string); } public Long persist(final byte[] key) { - Jedis j = getShard(key); - return j.persist(key); + Jedis j = getShard(key); + return j.persist(key); } public Long rpushx(byte[] key, byte[]... string) { - Jedis j = getShard(key); - return j.rpushx(key, string); + Jedis j = getShard(key); + return j.rpushx(key, string); } public Long llen(byte[] key) { @@ -296,7 +295,7 @@ public class BinaryShardedJedis extends Sharded return j.zadd(key, score, member); } - public Long zadd(byte[] key, Map scoreMembers) { + public Long zadd(byte[] key, Map scoreMembers) { Jedis j = getShard(key); return j.zadd(key, scoreMembers); } @@ -365,7 +364,7 @@ public class BinaryShardedJedis extends Sharded Jedis j = getShard(key); return j.zcount(key, min, max); } - + public Long zcount(byte[] key, byte[] min, byte[] max) { Jedis j = getShard(key); return j.zcount(key, min, max); @@ -394,8 +393,8 @@ public class BinaryShardedJedis extends Sharded } public Set zrangeByScore(byte[] key, byte[] min, byte[] max) { - Jedis j = getShard(key); - return j.zrangeByScore(key, min, max); + Jedis j = getShard(key); + return j.zrangeByScore(key, min, max); } public Set zrangeByScoreWithScores(byte[] key, byte[] min, byte[] max) { @@ -404,14 +403,15 @@ public class BinaryShardedJedis extends Sharded } public Set zrangeByScoreWithScores(byte[] key, byte[] min, - byte[] max, int offset, int count) { + byte[] max, int offset, int count) { Jedis j = getShard(key); return j.zrangeByScoreWithScores(key, min, max, offset, count); } - public Set zrangeByScore(byte[] key, byte[] min, byte[] max, int offset, int count) { - Jedis j = getShard(key); - return j.zrangeByScore(key, min, max, offset, count); + public Set zrangeByScore(byte[] key, byte[] min, byte[] max, + int offset, int count) { + Jedis j = getShard(key); + return j.zrangeByScore(key, min, max, offset, count); } public Set zrevrangeByScore(byte[] key, double max, double min) { @@ -436,7 +436,7 @@ public class BinaryShardedJedis extends Sharded Jedis j = getShard(key); return j.zrevrangeByScoreWithScores(key, max, min, offset, count); } - + public Set zrevrangeByScore(byte[] key, byte[] max, byte[] min) { Jedis j = getShard(key); return j.zrevrangeByScore(key, max, min); @@ -449,13 +449,13 @@ public class BinaryShardedJedis extends Sharded } public Set zrevrangeByScoreWithScores(byte[] key, byte[] max, - byte[] min) { + byte[] min) { Jedis j = getShard(key); return j.zrevrangeByScoreWithScores(key, max, min); } public Set zrevrangeByScoreWithScores(byte[] key, byte[] max, - byte[] min, int offset, int count) { + byte[] min, int offset, int count) { Jedis j = getShard(key); return j.zrevrangeByScoreWithScores(key, max, min, offset, count); } @@ -510,57 +510,57 @@ public class BinaryShardedJedis extends Sharded } public Boolean setbit(byte[] key, long offset, boolean value) { - Jedis j = getShard(key); - return j.setbit(key, offset, value); + Jedis j = getShard(key); + return j.setbit(key, offset, value); } public Boolean setbit(byte[] key, long offset, byte[] value) { - Jedis j = getShard(key); - return j.setbit(key, offset, value); + Jedis j = getShard(key); + return j.setbit(key, offset, value); } public Boolean getbit(byte[] key, long offset) { - Jedis j = getShard(key); - return j.getbit(key, offset); + Jedis j = getShard(key); + return j.getbit(key, offset); } public Long setrange(byte[] key, long offset, byte[] value) { - Jedis j = getShard(key); - return j.setrange(key, offset, value); + Jedis j = getShard(key); + return j.setrange(key, offset, value); } public byte[] getrange(byte[] key, long startOffset, long endOffset) { - Jedis j = getShard(key); - return j.getrange(key, startOffset, endOffset); + Jedis j = getShard(key); + return j.getrange(key, startOffset, endOffset); } public Long move(byte[] key, int dbIndex) { - Jedis j = getShard(key); - return j.move(key, dbIndex); + Jedis j = getShard(key); + return j.move(key, dbIndex); } public byte[] echo(byte[] arg) { - Jedis j = getShard(arg); - return j.echo(arg); + Jedis j = getShard(arg); + return j.echo(arg); } public List brpop(byte[] arg) { - Jedis j = getShard(arg); - return j.brpop(arg); + Jedis j = getShard(arg); + return j.brpop(arg); } public List blpop(byte[] arg) { - Jedis j = getShard(arg); - return j.blpop(arg); + Jedis j = getShard(arg); + return j.blpop(arg); } public Long bitcount(byte[] key) { - Jedis j = getShard(key); - return j.bitcount(key); + Jedis j = getShard(key); + return j.bitcount(key); } public Long bitcount(byte[] key, long start, long end) { - Jedis j = getShard(key); - return j.bitcount(key, start, end); + Jedis j = getShard(key); + return j.bitcount(key, start, end); } } \ No newline at end of file diff --git a/src/main/java/redis/clients/jedis/BitOP.java b/src/main/java/redis/clients/jedis/BitOP.java index 5e3ee89..8066a69 100644 --- a/src/main/java/redis/clients/jedis/BitOP.java +++ b/src/main/java/redis/clients/jedis/BitOP.java @@ -1,8 +1,5 @@ package redis.clients.jedis; public enum BitOP { - AND, - OR, - XOR, - NOT; + AND, OR, XOR, NOT; } diff --git a/src/main/java/redis/clients/jedis/BuilderFactory.java b/src/main/java/redis/clients/jedis/BuilderFactory.java index bebd2d6..76d013e 100755 --- a/src/main/java/redis/clients/jedis/BuilderFactory.java +++ b/src/main/java/redis/clients/jedis/BuilderFactory.java @@ -1,249 +1,257 @@ package redis.clients.jedis; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + import redis.clients.util.SafeEncoder; -import java.util.*; - public class BuilderFactory { public static final Builder DOUBLE = new Builder() { - public Double build(Object data) { - String asString = STRING.build(data); - return asString == null ? null : Double.valueOf(asString); - } + public Double build(Object data) { + String asString = STRING.build(data); + return asString == null ? null : Double.valueOf(asString); + } - public String toString() { - return "double"; - } + public String toString() { + return "double"; + } }; public static final Builder BOOLEAN = new Builder() { - public Boolean build(Object data) { - return ((Long) data) == 1; - } + public Boolean build(Object data) { + return ((Long) data) == 1; + } - public String toString() { - return "boolean"; - } + public String toString() { + return "boolean"; + } }; public static final Builder BYTE_ARRAY = new Builder() { - public byte[] build(Object data) { - return ((byte[]) data); // deleted == 1 - } + public byte[] build(Object data) { + return ((byte[]) data); // deleted == 1 + } - public String toString() { - return "byte[]"; - } + public String toString() { + return "byte[]"; + } }; public static final Builder LONG = new Builder() { - public Long build(Object data) { - return (Long) data; - } + public Long build(Object data) { + return (Long) data; + } - public String toString() { - return "long"; - } + public String toString() { + return "long"; + } }; public static final Builder STRING = new Builder() { - public String build(Object data) { - return data == null ? null : SafeEncoder.encode((byte[]) data); - } + public String build(Object data) { + return data == null ? null : SafeEncoder.encode((byte[]) data); + } - public String toString() { - return "string"; - } + public String toString() { + return "string"; + } }; public static final Builder> STRING_LIST = new Builder>() { - @SuppressWarnings("unchecked") - public List build(Object data) { - if (null == data) { - return null; - } - List l = (List) data; - final ArrayList result = new ArrayList(l.size()); - for (final byte[] barray : l) { - if (barray == null) { - result.add(null); - } else { - result.add(SafeEncoder.encode(barray)); - } - } - return result; - } + @SuppressWarnings("unchecked") + public List build(Object data) { + if (null == data) { + return null; + } + List l = (List) data; + final ArrayList result = new ArrayList(l.size()); + for (final byte[] barray : l) { + if (barray == null) { + result.add(null); + } else { + result.add(SafeEncoder.encode(barray)); + } + } + return result; + } - public String toString() { - return "List"; - } + public String toString() { + return "List"; + } }; public static final Builder> STRING_MAP = new Builder>() { - @SuppressWarnings("unchecked") - public Map build(Object data) { - final List flatHash = (List) data; - final Map hash = new HashMap(); - final Iterator iterator = flatHash.iterator(); - while (iterator.hasNext()) { - hash.put(SafeEncoder.encode(iterator.next()), SafeEncoder - .encode(iterator.next())); - } + @SuppressWarnings("unchecked") + public Map build(Object data) { + final List flatHash = (List) data; + final Map hash = new HashMap(); + final Iterator iterator = flatHash.iterator(); + while (iterator.hasNext()) { + hash.put(SafeEncoder.encode(iterator.next()), + SafeEncoder.encode(iterator.next())); + } - return hash; - } + return hash; + } - public String toString() { - return "Map"; - } + public String toString() { + return "Map"; + } }; + public static final Builder> STRING_SET = new Builder>() { - @SuppressWarnings("unchecked") - public Set build(Object data) { - if (null == data) { - return null; - } - List l = (List) data; - final Set result = new HashSet(l.size()); - for (final byte[] barray : l) { - if (barray == null) { - result.add(null); - } else { - result.add(SafeEncoder.encode(barray)); - } - } - return result; - } + @SuppressWarnings("unchecked") + public Set build(Object data) { + if (null == data) { + return null; + } + List l = (List) data; + final Set result = new HashSet(l.size()); + for (final byte[] barray : l) { + if (barray == null) { + result.add(null); + } else { + result.add(SafeEncoder.encode(barray)); + } + } + return result; + } - public String toString() { - return "Set"; - } + public String toString() { + return "Set"; + } }; public static final Builder> BYTE_ARRAY_LIST = new Builder>() { - @SuppressWarnings("unchecked") - public List build(Object data) { - if (null == data) { - return null; - } - List l = (List) data; + @SuppressWarnings("unchecked") + public List build(Object data) { + if (null == data) { + return null; + } + List l = (List) data; - return l; - } + return l; + } - public String toString() { - return "List"; - } + public String toString() { + return "List"; + } }; public static final Builder> BYTE_ARRAY_ZSET = new Builder>() { - @SuppressWarnings("unchecked") - public Set build(Object data) { - if (null == data) { - return null; - } - List l = (List) data; - final Set result = new LinkedHashSet(l); - for (final byte[] barray : l) { - if (barray == null) { - result.add(null); - } else { - result.add(barray); - } - } - return result; - } + @SuppressWarnings("unchecked") + public Set build(Object data) { + if (null == data) { + return null; + } + List l = (List) data; + final Set result = new LinkedHashSet(l); + for (final byte[] barray : l) { + if (barray == null) { + result.add(null); + } else { + result.add(barray); + } + } + return result; + } - public String toString() { - return "ZSet"; - } + public String toString() { + return "ZSet"; + } }; public static final Builder> BYTE_ARRAY_MAP = new Builder>() { - @SuppressWarnings("unchecked") - public Map build(Object data) { - final List flatHash = (List) data; - final Map hash = new HashMap(); - final Iterator iterator = flatHash.iterator(); - while (iterator.hasNext()) { - hash.put(iterator.next(), iterator.next()); - } + @SuppressWarnings("unchecked") + public Map build(Object data) { + final List flatHash = (List) data; + final Map hash = new HashMap(); + final Iterator iterator = flatHash.iterator(); + while (iterator.hasNext()) { + hash.put(iterator.next(), iterator.next()); + } - return hash; - } + return hash; + } - public String toString() { - return "Map"; - } + public String toString() { + return "Map"; + } }; public static final Builder> STRING_ZSET = new Builder>() { - @SuppressWarnings("unchecked") - public Set build(Object data) { - if (null == data) { - return null; - } - List l = (List) data; - final Set result = new LinkedHashSet(l.size()); - for (final byte[] barray : l) { - if (barray == null) { - result.add(null); - } else { - result.add(SafeEncoder.encode(barray)); - } - } - return result; - } + @SuppressWarnings("unchecked") + public Set build(Object data) { + if (null == data) { + return null; + } + List l = (List) data; + final Set result = new LinkedHashSet(l.size()); + for (final byte[] barray : l) { + if (barray == null) { + result.add(null); + } else { + result.add(SafeEncoder.encode(barray)); + } + } + return result; + } - public String toString() { - return "ZSet"; - } + public String toString() { + return "ZSet"; + } }; public static final Builder> TUPLE_ZSET = new Builder>() { - @SuppressWarnings("unchecked") - public Set build(Object data) { - if (null == data) { - return null; - } - List l = (List) data; - final Set result = new LinkedHashSet(l.size()); - Iterator iterator = l.iterator(); - while (iterator.hasNext()) { - result.add(new Tuple(SafeEncoder.encode(iterator.next()), - Double.valueOf(SafeEncoder.encode(iterator.next())))); - } - return result; - } + @SuppressWarnings("unchecked") + public Set build(Object data) { + if (null == data) { + return null; + } + List l = (List) data; + final Set result = new LinkedHashSet(l.size()); + Iterator iterator = l.iterator(); + while (iterator.hasNext()) { + result.add(new Tuple(SafeEncoder.encode(iterator.next()), + Double.valueOf(SafeEncoder.encode(iterator.next())))); + } + return result; + } - public String toString() { - return "ZSet"; - } + public String toString() { + return "ZSet"; + } }; public static final Builder> TUPLE_ZSET_BINARY = new Builder>() { - @SuppressWarnings("unchecked") - public Set build(Object data) { - if (null == data) { - return null; - } - List l = (List) data; - final Set result = new LinkedHashSet(l.size()); - Iterator iterator = l.iterator(); - while (iterator.hasNext()) { - result.add(new Tuple(iterator.next(), Double - .valueOf(SafeEncoder.encode(iterator.next())))); - } + @SuppressWarnings("unchecked") + public Set build(Object data) { + if (null == data) { + return null; + } + List l = (List) data; + final Set result = new LinkedHashSet(l.size()); + Iterator iterator = l.iterator(); + while (iterator.hasNext()) { + result.add(new Tuple(iterator.next(), Double + .valueOf(SafeEncoder.encode(iterator.next())))); + } - return result; + return result; - } + } - public String toString() { - return "ZSet"; - } + public String toString() { + return "ZSet"; + } }; } diff --git a/src/main/java/redis/clients/jedis/Client.java b/src/main/java/redis/clients/jedis/Client.java index 8db267d..96d0560 100644 --- a/src/main/java/redis/clients/jedis/Client.java +++ b/src/main/java/redis/clients/jedis/Client.java @@ -1,6 +1,6 @@ package redis.clients.jedis; -import redis.clients.util.SafeEncoder; +import static redis.clients.jedis.Protocol.toByteArray; import java.util.ArrayList; import java.util.HashMap; @@ -8,7 +8,7 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; -import static redis.clients.jedis.Protocol.toByteArray; +import redis.clients.util.SafeEncoder; public class Client extends BinaryClient implements Commands { public Client(final String host) { @@ -23,8 +23,10 @@ public class Client extends BinaryClient implements Commands { set(SafeEncoder.encode(key), SafeEncoder.encode(value)); } - public void set(final String key, final String value, final String nxxx, final String expx, final long time) { - set(SafeEncoder.encode(key), SafeEncoder.encode(value), SafeEncoder.encode(nxxx), SafeEncoder.encode(expx), time); + public void set(final String key, final String value, final String nxxx, + final String expx, final long time) { + set(SafeEncoder.encode(key), SafeEncoder.encode(value), + SafeEncoder.encode(nxxx), SafeEncoder.encode(expx), time); } public void get(final String key) { @@ -391,14 +393,14 @@ public class Client extends BinaryClient implements Commands { } blpop(bargs); } - + public void blpop(final int timeout, final String... keys) { - List args = new ArrayList(); - for (String arg : keys) { - args.add(arg); - } - args.add(String.valueOf(timeout)); - blpop(args.toArray(new String[args.size()])); + List args = new ArrayList(); + for (String arg : keys) { + args.add(arg); + } + args.add(String.valueOf(timeout)); + blpop(args.toArray(new String[args.size()])); } public void sort(final String key, final SortingParams sortingParameters, @@ -418,14 +420,14 @@ public class Client extends BinaryClient implements Commands { } brpop(bargs); } - + public void brpop(final int timeout, final String... keys) { - List args = new ArrayList(); - for (String arg : keys) { - args.add(arg); - } - args.add(String.valueOf(timeout)); - brpop(args.toArray(new String[args.size()])); + List args = new ArrayList(); + for (String arg : keys) { + args.add(arg); + } + args.add(String.valueOf(timeout)); + brpop(args.toArray(new String[args.size()])); } public void zcount(final String key, final double min, final double max) { @@ -620,7 +622,7 @@ public class Client extends BinaryClient implements Commands { } public void setbit(final String key, final long offset, final String value) { - setbit(SafeEncoder.encode(key), offset, SafeEncoder.encode(value)); + setbit(SafeEncoder.encode(key), offset, SafeEncoder.encode(value)); } public void getbit(String key, long offset) { @@ -670,6 +672,18 @@ public class Client extends BinaryClient implements Commands { } subscribe(cs); } + + public void pubsubChannels(String pattern) { + pubsub(Protocol.PUBSUB_CHANNELS, pattern); + } + + public void pubsubNumPat() { + pubsub(Protocol.PUBSUB_NUM_PAT); + } + + public void pubsubNumSub(String... channels) { + pubsub(Protocol.PUBSUB_NUMSUB, channels); + } public void configSet(String parameter, String value) { configSet(SafeEncoder.encode(parameter), SafeEncoder.encode(value)); @@ -709,12 +723,14 @@ public class Client extends BinaryClient implements Commands { scriptLoad(SafeEncoder.encode(script)); } - public void zadd(String key, Map scoreMembers) { - HashMap binaryScoreMembers = new HashMap(); + public void zadd(String key, Map scoreMembers) { - for (Map.Entry entry : scoreMembers.entrySet()) { - binaryScoreMembers.put(entry.getKey(), - SafeEncoder.encode(entry.getValue())); + HashMap binaryScoreMembers = new HashMap(); + + for (Map.Entry entry : scoreMembers.entrySet()) { + + binaryScoreMembers.put(SafeEncoder.encode(entry.getKey()), + entry.getValue()); } zaddBinary(SafeEncoder.encode(key), binaryScoreMembers); @@ -733,15 +749,15 @@ public class Client extends BinaryClient implements Commands { } public void bitcount(final String key) { - bitcount(SafeEncoder.encode(key)); + bitcount(SafeEncoder.encode(key)); } public void bitcount(final String key, long start, long end) { - bitcount(SafeEncoder.encode(key), start, end); + bitcount(SafeEncoder.encode(key), start, end); } public void bitop(BitOP op, final String destKey, String... srcKeys) { - bitop(op, SafeEncoder.encode(destKey), getByteParams(srcKeys)); + bitop(op, SafeEncoder.encode(destKey), getByteParams(srcKeys)); } public void sentinel(final String... args) { @@ -752,64 +768,153 @@ public class Client extends BinaryClient implements Commands { sentinel(arg); } - public void sentinel(final String cmd, String arg1, int arg2) { - sentinel(SafeEncoder.encode(cmd), SafeEncoder.encode(arg1), - toByteArray(arg2)); + public void dump(final String key) { + dump(SafeEncoder.encode(key)); } - - public void dump(final String key) { - dump(SafeEncoder.encode(key)); + + public void restore(final String key, final int ttl, + final byte[] serializedValue) { + restore(SafeEncoder.encode(key), ttl, serializedValue); } - - public void restore(final String key, final int ttl, final byte[] serializedValue) { - restore(SafeEncoder.encode(key), ttl, serializedValue); - } - + public void pexpire(final String key, final int milliseconds) { - pexpire(SafeEncoder.encode(key), milliseconds); + pexpire(SafeEncoder.encode(key), milliseconds); } - + public void pexpireAt(final String key, final long millisecondsTimestamp) { - pexpireAt(SafeEncoder.encode(key), millisecondsTimestamp); + pexpireAt(SafeEncoder.encode(key), millisecondsTimestamp); } - + public void pttl(final String key) { - pttl(SafeEncoder.encode(key)); + pttl(SafeEncoder.encode(key)); } - + public void incrByFloat(final String key, final double increment) { - incrByFloat(SafeEncoder.encode(key), increment); + incrByFloat(SafeEncoder.encode(key), increment); } - - public void psetex(final String key, final int milliseconds, final String value) { - psetex(SafeEncoder.encode(key), milliseconds, SafeEncoder.encode(value)); + + public void psetex(final String key, final int milliseconds, + final String value) { + psetex(SafeEncoder.encode(key), milliseconds, SafeEncoder.encode(value)); } - + public void set(final String key, final String value, final String nxxx) { - set(SafeEncoder.encode(key), SafeEncoder.encode(value), SafeEncoder.encode(nxxx)); + set(SafeEncoder.encode(key), SafeEncoder.encode(value), + SafeEncoder.encode(nxxx)); } - - public void set(final String key, final String value, final String nxxx, final String expx, final int time) { - set(SafeEncoder.encode(key), SafeEncoder.encode(value), SafeEncoder.encode(nxxx), SafeEncoder.encode(expx), time); + + public void set(final String key, final String value, final String nxxx, + final String expx, final int time) { + set(SafeEncoder.encode(key), SafeEncoder.encode(value), + SafeEncoder.encode(nxxx), SafeEncoder.encode(expx), time); } - + public void srandmember(final String key, final int count) { - srandmember(SafeEncoder.encode(key), count); + srandmember(SafeEncoder.encode(key), count); } public void clientKill(final String client) { - clientKill(SafeEncoder.encode(client)); + clientKill(SafeEncoder.encode(client)); } - + public void clientSetname(final String name) { - clientSetname(SafeEncoder.encode(name)); + clientSetname(SafeEncoder.encode(name)); + } + + public void migrate(final String host, final int port, final String key, + final int destinationDb, final int timeout) { + migrate(SafeEncoder.encode(host), port, SafeEncoder.encode(key), + destinationDb, timeout); + } + + public void hincrByFloat(final String key, final String field, + double increment) { + hincrByFloat(SafeEncoder.encode(key), SafeEncoder.encode(field), + increment); + } + + public void hscan(final String key, int cursor, final ScanParams params) { + hscan(SafeEncoder.encode(key), cursor, params); + } + + public void sscan(final String key, int cursor, final ScanParams params) { + sscan(SafeEncoder.encode(key), cursor, params); + } + + public void zscan(final String key, int cursor, final ScanParams params) { + zscan(SafeEncoder.encode(key), cursor, params); + } + + public void cluster(final String subcommand, final int... args) { + final byte[][] arg = new byte[args.length + 1][]; + for (int i = 1; i < arg.length; i++) { + arg[i] = toByteArray(args[i - 1]); + } + arg[0] = SafeEncoder.encode(subcommand); + cluster(arg); } - public void migrate(final String host, final int port, final String key, final int destinationDb, final int timeout) { - migrate(SafeEncoder.encode(host), port, SafeEncoder.encode(key), destinationDb, timeout); + public void pubsub(final String subcommand, final String... args) { + final byte[][] arg = new byte[args.length+1][]; + for (int i = 1; i < arg.length; i++) { + arg[i] = SafeEncoder.encode(args[i-1]); + } + arg[0] = SafeEncoder.encode(subcommand); + pubsub(arg); } - - public void hincrByFloat(final String key, final String field, double increment) { - hincrByFloat(SafeEncoder.encode(key), SafeEncoder.encode(field), increment); + + public void cluster(final String subcommand, final String... args) { + final byte[][] arg = new byte[args.length + 1][]; + for (int i = 1; i < arg.length; i++) { + arg[i] = SafeEncoder.encode(args[i - 1]); + } + arg[0] = SafeEncoder.encode(subcommand); + cluster(arg); + } + + public void cluster(final String subcommand) { + final byte[][] arg = new byte[1][]; + arg[0] = SafeEncoder.encode(subcommand); + cluster(arg); + } + + public void clusterNodes() { + cluster(Protocol.CLUSTER_NODES); + } + + public void clusterMeet(final String ip, final int port) { + cluster(Protocol.CLUSTER_MEET, ip, String.valueOf(port)); + } + + public void clusterAddSlots(final int... slots) { + cluster(Protocol.CLUSTER_ADDSLOTS, slots); + } + + public void clusterDelSlots(final int... slots) { + cluster(Protocol.CLUSTER_DELSLOTS, slots); + } + + public void clusterInfo() { + cluster(Protocol.CLUSTER_INFO); + } + + public void clusterGetKeysInSlot(final int slot, final int count) { + final int[] args = new int[] { slot, count }; + cluster(Protocol.CLUSTER_GETKEYSINSLOT, args); + } + + public void clusterSetSlotNode(final int slot, final String nodeId) { + cluster(Protocol.CLUSTER_SETSLOT, String.valueOf(slot), + Protocol.CLUSTER_SETSLOT_NODE, nodeId); + } + + public void clusterSetSlotMigrating(final int slot, final String nodeId) { + cluster(Protocol.CLUSTER_SETSLOT, String.valueOf(slot), + Protocol.CLUSTER_SETSLOT_MIGRATING, nodeId); + } + + public void clusterSetSlotImporting(final int slot, final String nodeId) { + cluster(Protocol.CLUSTER_SETSLOT, String.valueOf(slot), + Protocol.CLUSTER_SETSLOT_IMPORTING, nodeId); } } diff --git a/src/main/java/redis/clients/jedis/ClusterCommands.java b/src/main/java/redis/clients/jedis/ClusterCommands.java new file mode 100644 index 0000000..fff4533 --- /dev/null +++ b/src/main/java/redis/clients/jedis/ClusterCommands.java @@ -0,0 +1,23 @@ +package redis.clients.jedis; + +import java.util.List; + +public interface ClusterCommands { + String clusterNodes(); + + String clusterMeet(final String ip, final int port); + + String clusterAddSlots(final int... slots); + + String clusterDelSlots(final int... slots); + + String clusterInfo(); + + List clusterGetKeysInSlot(final int slot, final int count); + + String clusterSetSlotNode(final int slot, final String nodeId); + + String clusterSetSlotMigrating(final int slot, final String nodeId); + + String clusterSetSlotImporting(final int slot, final String nodeId); +} diff --git a/src/main/java/redis/clients/jedis/ClusterPipeline.java b/src/main/java/redis/clients/jedis/ClusterPipeline.java new file mode 100644 index 0000000..73330d4 --- /dev/null +++ b/src/main/java/redis/clients/jedis/ClusterPipeline.java @@ -0,0 +1,23 @@ +package redis.clients.jedis; + +import java.util.List; + +public interface ClusterPipeline { + Response clusterNodes(); + + Response clusterMeet(final String ip, final int port); + + Response clusterAddSlots(final int... slots); + + Response clusterDelSlots(final int... slots); + + Response clusterInfo(); + + Response> clusterGetKeysInSlot(final int slot, final int count); + + Response clusterSetSlotNode(final int slot, final String nodeId); + + Response clusterSetSlotMigrating(final int slot, final String nodeId); + + Response clusterSetSlotImporting(final int slot, final String nodeId); +} diff --git a/src/main/java/redis/clients/jedis/Commands.java b/src/main/java/redis/clients/jedis/Commands.java index 851c065..2d7ea92 100644 --- a/src/main/java/redis/clients/jedis/Commands.java +++ b/src/main/java/redis/clients/jedis/Commands.java @@ -1,14 +1,15 @@ package redis.clients.jedis; -import redis.clients.jedis.BinaryClient.LIST_POSITION; - import java.util.Map; +import redis.clients.jedis.BinaryClient.LIST_POSITION; + public interface Commands { public void set(final String key, final String value); - public void set(final String key, final String value, final String nxxx, final String expx, final long time); + public void set(final String key, final String value, final String nxxx, + final String expx, final long time); public void get(final String key); @@ -143,7 +144,7 @@ public interface Commands { public void zadd(final String key, final double score, final String member); - public void zadd(final String key, final Map scoreMembers); + public void zadd(final String key, final Map scoreMembers); public void zrange(final String key, final long start, final long end); @@ -295,4 +296,14 @@ public interface Commands { public void bitcount(final String key, long start, long end); public void bitop(BitOP op, final String destKey, String... srcKeys); + + public void scan(int cursor, final ScanParams params); + + public void hscan(final String key, int cursor, final ScanParams params); + + public void sscan(final String key, int cursor, final ScanParams params); + + public void zscan(final String key, int cursor, final ScanParams params); + + public void waitReplicas(int replicas, long timeout); } diff --git a/src/main/java/redis/clients/jedis/Connection.java b/src/main/java/redis/clients/jedis/Connection.java index 1c42b94..74bcc09 100644 --- a/src/main/java/redis/clients/jedis/Connection.java +++ b/src/main/java/redis/clients/jedis/Connection.java @@ -25,218 +25,230 @@ public class Connection { private int timeout = Protocol.DEFAULT_TIMEOUT; public Socket getSocket() { - return socket; + return socket; } public int getTimeout() { - return timeout; + return timeout; } public void setTimeout(final int timeout) { - this.timeout = timeout; + this.timeout = timeout; } public void setTimeoutInfinite() { - try { - if(!isConnected()) { - connect(); - } - socket.setKeepAlive(true); - socket.setSoTimeout(0); - } catch (SocketException ex) { - throw new JedisException(ex); - } + try { + if (!isConnected()) { + connect(); + } + socket.setKeepAlive(true); + socket.setSoTimeout(0); + } catch (SocketException ex) { + throw new JedisException(ex); + } } public void rollbackTimeout() { - try { - socket.setSoTimeout(timeout); - socket.setKeepAlive(false); - } catch (SocketException ex) { - throw new JedisException(ex); - } + try { + socket.setSoTimeout(timeout); + socket.setKeepAlive(false); + } catch (SocketException ex) { + throw new JedisException(ex); + } } public Connection(final String host) { - super(); - this.host = host; + super(); + this.host = host; } protected void flush() { - try { - outputStream.flush(); - } catch (IOException e) { - throw new JedisConnectionException(e); - } + try { + outputStream.flush(); + } catch (IOException e) { + throw new JedisConnectionException(e); + } } protected Connection sendCommand(final Command cmd, final String... args) { - final byte[][] bargs = new byte[args.length][]; - for (int i = 0; i < args.length; i++) { - bargs[i] = SafeEncoder.encode(args[i]); - } - return sendCommand(cmd, bargs); + final byte[][] bargs = new byte[args.length][]; + for (int i = 0; i < args.length; i++) { + bargs[i] = SafeEncoder.encode(args[i]); + } + return sendCommand(cmd, bargs); } protected Connection sendCommand(final Command cmd, final byte[]... args) { - connect(); - Protocol.sendCommand(outputStream, cmd, args); - pipelinedCommands++; - return this; + connect(); + Protocol.sendCommand(outputStream, cmd, args); + pipelinedCommands++; + return this; } - + protected Connection sendCommand(final Command cmd) { - connect(); - Protocol.sendCommand(outputStream, cmd, new byte[0][]); - pipelinedCommands++; - return this; + connect(); + Protocol.sendCommand(outputStream, cmd, new byte[0][]); + pipelinedCommands++; + return this; } public Connection(final String host, final int port) { - super(); - this.host = host; - this.port = port; + super(); + this.host = host; + this.port = port; } public String getHost() { - return host; + return host; } public void setHost(final String host) { - this.host = host; + this.host = host; } public int getPort() { - return port; + return port; } public void setPort(final int port) { - this.port = port; + this.port = port; } public Connection() { - + } public void connect() { - if (!isConnected()) { - try { - socket = new Socket(); - //->@wjw_add - socket.setReuseAddress(true); - socket.setKeepAlive(true); //Will monitor the TCP connection is valid - socket.setTcpNoDelay(true); //Socket buffer Whetherclosed, to ensure timely delivery of data - socket.setSoLinger(true,0); //Control calls close () method, the underlying socket is closed immediately - //<-@wjw_add + if (!isConnected()) { + try { + socket = new Socket(); + // ->@wjw_add + socket.setReuseAddress(true); + socket.setKeepAlive(true); // Will monitor the TCP connection is + // valid + socket.setTcpNoDelay(true); // Socket buffer Whetherclosed, to + // ensure timely delivery of data + socket.setSoLinger(true, 0); // Control calls close () method, + // the underlying socket is closed + // immediately + // <-@wjw_add - socket.connect(new InetSocketAddress(host, port), timeout); - socket.setSoTimeout(timeout); - outputStream = new RedisOutputStream(socket.getOutputStream()); - inputStream = new RedisInputStream(socket.getInputStream()); - } catch (IOException ex) { - throw new JedisConnectionException(ex); - } - } + socket.connect(new InetSocketAddress(host, port), timeout); + socket.setSoTimeout(timeout); + outputStream = new RedisOutputStream(socket.getOutputStream()); + inputStream = new RedisInputStream(socket.getInputStream()); + } catch (IOException ex) { + throw new JedisConnectionException(ex); + } + } } public void disconnect() { - if (isConnected()) { - try { - inputStream.close(); - outputStream.close(); - if (!socket.isClosed()) { - socket.close(); - } - } catch (IOException ex) { - throw new JedisConnectionException(ex); - } - } + if (isConnected()) { + try { + inputStream.close(); + outputStream.close(); + if (!socket.isClosed()) { + socket.close(); + } + } catch (IOException ex) { + throw new JedisConnectionException(ex); + } + } } public boolean isConnected() { - return socket != null && socket.isBound() && !socket.isClosed() - && socket.isConnected() && !socket.isInputShutdown() - && !socket.isOutputShutdown(); + return socket != null && socket.isBound() && !socket.isClosed() + && socket.isConnected() && !socket.isInputShutdown() + && !socket.isOutputShutdown(); } protected String getStatusCodeReply() { - flush(); - pipelinedCommands--; - final byte[] resp = (byte[]) Protocol.read(inputStream); - if (null == resp) { - return null; - } else { - return SafeEncoder.encode(resp); - } + flush(); + pipelinedCommands--; + final byte[] resp = (byte[]) Protocol.read(inputStream); + if (null == resp) { + return null; + } else { + return SafeEncoder.encode(resp); + } } public String getBulkReply() { - final byte[] result = getBinaryBulkReply(); - if (null != result) { - return SafeEncoder.encode(result); - } else { - return null; - } + final byte[] result = getBinaryBulkReply(); + if (null != result) { + return SafeEncoder.encode(result); + } else { + return null; + } } public byte[] getBinaryBulkReply() { - flush(); - pipelinedCommands--; - return (byte[]) Protocol.read(inputStream); + flush(); + pipelinedCommands--; + return (byte[]) Protocol.read(inputStream); } public Long getIntegerReply() { - flush(); - pipelinedCommands--; - return (Long) Protocol.read(inputStream); + flush(); + pipelinedCommands--; + return (Long) Protocol.read(inputStream); } public List getMultiBulkReply() { - return BuilderFactory.STRING_LIST.build(getBinaryMultiBulkReply()); + return BuilderFactory.STRING_LIST.build(getBinaryMultiBulkReply()); } @SuppressWarnings("unchecked") public List getBinaryMultiBulkReply() { - flush(); - pipelinedCommands--; - return (List) Protocol.read(inputStream); + flush(); + pipelinedCommands--; + return (List) Protocol.read(inputStream); + } + + public void resetPipelinedCount() { + pipelinedCommands = 0; } @SuppressWarnings("unchecked") + public List getRawObjectMultiBulkReply() { + return (List) Protocol.read(inputStream); + } + public List getObjectMultiBulkReply() { flush(); pipelinedCommands--; - return (List) Protocol.read(inputStream); + return getRawObjectMultiBulkReply(); } - + @SuppressWarnings("unchecked") public List getIntegerMultiBulkReply() { - flush(); - pipelinedCommands--; - return (List) Protocol.read(inputStream); + flush(); + pipelinedCommands--; + return (List) Protocol.read(inputStream); } public List getAll() { - return getAll(0); + return getAll(0); } public List getAll(int except) { - List all = new ArrayList(); - flush(); - while (pipelinedCommands > except) { - try{ - all.add(Protocol.read(inputStream)); - }catch(JedisDataException e){ - all.add(e); - } - pipelinedCommands--; - } - return all; + List all = new ArrayList(); + flush(); + while (pipelinedCommands > except) { + try { + all.add(Protocol.read(inputStream)); + } catch (JedisDataException e) { + all.add(e); + } + pipelinedCommands--; + } + return all; } public Object getOne() { - flush(); - pipelinedCommands--; - return Protocol.read(inputStream); + flush(); + pipelinedCommands--; + return Protocol.read(inputStream); } } diff --git a/src/main/java/redis/clients/jedis/HostAndPort.java b/src/main/java/redis/clients/jedis/HostAndPort.java new file mode 100644 index 0000000..4f756d6 --- /dev/null +++ b/src/main/java/redis/clients/jedis/HostAndPort.java @@ -0,0 +1,49 @@ +package redis.clients.jedis; + +public class HostAndPort { + public static final String LOCALHOST_STR = "localhost"; + + private String host; + private int port; + + public HostAndPort(String host, int port) { + this.host = host; + this.port = port; + } + + public String getHost() { + return host; + } + + public int getPort() { + return port; + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof HostAndPort) { + HostAndPort hp = (HostAndPort) obj; + + String thisHost = convertHost(host); + String hpHost = convertHost(hp.host); + return port == hp.port && thisHost.equals(hpHost); + + } + + return false; + } + + @Override + public String toString() { + return host + ":" + port; + } + + private String convertHost(String host) { + if (host.equals("127.0.0.1")) + return LOCALHOST_STR; + else if (host.equals("::1")) + return LOCALHOST_STR; + + return host; + } +} diff --git a/src/main/java/redis/clients/jedis/Jedis.java b/src/main/java/redis/clients/jedis/Jedis.java index 082b197..1b202ac 100644 --- a/src/main/java/redis/clients/jedis/Jedis.java +++ b/src/main/java/redis/clients/jedis/Jedis.java @@ -1,13 +1,22 @@ package redis.clients.jedis; +import java.net.URI; +import java.util.AbstractMap; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + import redis.clients.jedis.BinaryClient.LIST_POSITION; import redis.clients.util.SafeEncoder; import redis.clients.util.Slowlog; -import java.net.URI; -import java.util.*; - -public class Jedis extends BinaryJedis implements JedisCommands, MultiKeyCommands, AdvancedJedisCommands, ScriptingCommands { +public class Jedis extends BinaryJedis implements JedisCommands, + MultiKeyCommands, AdvancedJedisCommands, ScriptingCommands, + BasicCommands, ClusterCommands { public Jedis(final String host) { super(host); } @@ -47,24 +56,29 @@ public class Jedis extends BinaryJedis implements JedisCommands, MultiKeyCommand /** * Set the string value as value of the key. The string can't be longer than * 1073741824 bytes (1 GB). + * * @param key * @param value - * @param nxxx NX|XX, NX -- Only set the key if it does not already exist. - * XX -- Only set the key if it already exist. - * @param expx EX|PX, expire time units: EX = seconds; PX = milliseconds - * @param time expire time in the units of {@param #expx} + * @param nxxx + * NX|XX, NX -- Only set the key if it does not already exist. XX + * -- Only set the key if it already exist. + * @param expx + * EX|PX, expire time units: EX = seconds; PX = milliseconds + * @param time + * expire time in the units of {@param #expx} * @return Status code reply */ - public String set(final String key, final String value, final String nxxx, final String expx, final long time) { - checkIsInMulti(); - client.set(key, value, nxxx, expx, time); - return client.getStatusCodeReply(); + public String set(final String key, final String value, final String nxxx, + final String expx, final long time) { + checkIsInMulti(); + client.set(key, value, nxxx, expx, time); + return client.getStatusCodeReply(); } /** - * Get the value of the specified key. If the key does not exist the special - * value 'nil' is returned. If the value stored at key is not a string an - * error is returned because GET can only handle string values. + * Get the value of the specified key. If the key does not exist null is + * returned. If the value stored at key is not a string an error is returned + * because GET can only handle string values. *

* Time complexity: O(1) * @@ -110,8 +124,8 @@ public class Jedis extends BinaryJedis implements JedisCommands, MultiKeyCommand } public Long del(String key) { - client.del(key); - return client.getIntegerReply(); + client.del(key); + return client.getIntegerReply(); } /** @@ -1372,7 +1386,7 @@ public class Jedis extends BinaryJedis implements JedisCommands, MultiKeyCommand client.srandmember(key); return client.getBulkReply(); } - + public List srandmember(final String key, final int count) { checkIsInMulti(); client.srandmember(key, count); @@ -1406,7 +1420,7 @@ public class Jedis extends BinaryJedis implements JedisCommands, MultiKeyCommand return client.getIntegerReply(); } - public Long zadd(final String key, final Map scoreMembers) { + public Long zadd(final String key, final Map scoreMembers) { checkIsInMulti(); client.zadd(key, scoreMembers); return client.getIntegerReply(); @@ -1780,39 +1794,39 @@ public class Jedis extends BinaryJedis implements JedisCommands, MultiKeyCommand } public List blpop(String... args) { - client.blpop(args); - client.setTimeoutInfinite(); - final List multiBulkReply = client.getMultiBulkReply(); - client.rollbackTimeout(); - return multiBulkReply; + client.blpop(args); + client.setTimeoutInfinite(); + final List multiBulkReply = client.getMultiBulkReply(); + client.rollbackTimeout(); + return multiBulkReply; } public List brpop(String... args) { - client.brpop(args); - client.setTimeoutInfinite(); - final List multiBulkReply = client.getMultiBulkReply(); - client.rollbackTimeout(); - return multiBulkReply; + client.brpop(args); + client.setTimeoutInfinite(); + final List multiBulkReply = client.getMultiBulkReply(); + client.rollbackTimeout(); + return multiBulkReply; } public List blpop(String arg) { - String[] args = new String[1]; - args[0] = arg; - client.blpop(args); - client.setTimeoutInfinite(); - final List multiBulkReply = client.getMultiBulkReply(); - client.rollbackTimeout(); - return multiBulkReply; + String[] args = new String[1]; + args[0] = arg; + client.blpop(args); + client.setTimeoutInfinite(); + final List multiBulkReply = client.getMultiBulkReply(); + client.rollbackTimeout(); + return multiBulkReply; } public List brpop(String arg) { - String[] args = new String[1]; - args[0] = arg; - client.brpop(args); - client.setTimeoutInfinite(); - final List multiBulkReply = client.getMultiBulkReply(); - client.rollbackTimeout(); - return multiBulkReply; + String[] args = new String[1]; + args[0] = arg; + client.brpop(args); + client.setTimeoutInfinite(); + final List multiBulkReply = client.getMultiBulkReply(); + client.rollbackTimeout(); + return multiBulkReply; } /** @@ -1945,8 +1959,6 @@ public class Jedis extends BinaryJedis implements JedisCommands, MultiKeyCommand return multiBulkReply; } - - public Long zcount(final String key, final double min, final double max) { checkIsInMulti(); client.zcount(key, min, max); @@ -2011,8 +2023,10 @@ public class Jedis extends BinaryJedis implements JedisCommands, MultiKeyCommand * @see #zcount(String, double, double) * * @param key - * @param min a double or Double.MIN_VALUE for "-inf" - * @param max a double or Double.MAX_VALUE for "+inf" + * @param min + * a double or Double.MIN_VALUE for "-inf" + * @param max + * a double or Double.MAX_VALUE for "+inf" * @return Multi bulk reply specifically a list of elements in the specified * score range. */ @@ -2619,8 +2633,8 @@ public class Jedis extends BinaryJedis implements JedisCommands, MultiKeyCommand } public Boolean setbit(String key, long offset, String value) { - client.setbit(key, offset, value); - return client.getIntegerReply() == 1; + client.setbit(key, offset, value); + return client.getIntegerReply() == 1; } /** @@ -2733,26 +2747,26 @@ public class Jedis extends BinaryJedis implements JedisCommands, MultiKeyCommand } public void subscribe(final JedisPubSub jedisPubSub, - final String... channels) { - client.setTimeoutInfinite(); - jedisPubSub.proceed(client, channels); - client.rollbackTimeout(); + final String... channels) { + client.setTimeoutInfinite(); + jedisPubSub.proceed(client, channels); + client.rollbackTimeout(); } public Long publish(final String channel, final String message) { - checkIsInMulti(); - connect(); - client.publish(channel, message); - return client.getIntegerReply(); + checkIsInMulti(); + connect(); + client.publish(channel, message); + return client.getIntegerReply(); } public void psubscribe(final JedisPubSub jedisPubSub, - final String... patterns) { - checkIsInMulti(); - connect(); - client.setTimeoutInfinite(); - jedisPubSub.proceedWithPatterns(client, patterns); - client.rollbackTimeout(); + final String... patterns) { + checkIsInMulti(); + connect(); + client.setTimeoutInfinite(); + jedisPubSub.proceedWithPatterns(client, patterns); + client.rollbackTimeout(); } protected static String[] getParams(List keys, List args) { @@ -2862,18 +2876,18 @@ public class Jedis extends BinaryJedis implements JedisCommands, MultiKeyCommand } public Long bitcount(final String key) { - client.bitcount(key); - return client.getIntegerReply(); + client.bitcount(key); + return client.getIntegerReply(); } public Long bitcount(final String key, long start, long end) { - client.bitcount(key, start, end); - return client.getIntegerReply(); + client.bitcount(key, start, end); + return client.getIntegerReply(); } public Long bitop(BitOP op, final String destKey, String... srcKeys) { - client.bitop(op, destKey, srcKeys); - return client.getIntegerReply(); + client.bitop(op, destKey, srcKeys); + return client.getIntegerReply(); } /** @@ -2909,7 +2923,7 @@ public class Jedis extends BinaryJedis implements JedisCommands, MultiKeyCommand * @return */ @SuppressWarnings("rawtypes") - public List> sentinelMasters() { + public List> sentinelMasters() { client.sentinel(Protocol.SENTINEL_MASTERS); final List reply = client.getObjectMultiBulkReply(); @@ -2987,7 +3001,7 @@ public class Jedis extends BinaryJedis implements JedisCommands, MultiKeyCommand * @return */ @SuppressWarnings("rawtypes") - public List> sentinelSlaves(String masterName) { + public List> sentinelSlaves(String masterName) { client.sentinel(Protocol.SENTINEL_SLAVES, masterName); final List reply = client.getObjectMultiBulkReply(); @@ -2998,104 +3012,244 @@ public class Jedis extends BinaryJedis implements JedisCommands, MultiKeyCommand return slaves; } - /** - *
-     * redis 127.0.0.1:26381> SENTINEL is-master-down-by-addr 127.0.0.1 1
-     * 1) (integer) 0
-     * 2) "?"
-     * redis 127.0.0.1:26381> SENTINEL is-master-down-by-addr 127.0.0.1 6379
-     * 1) (integer) 0
-     * 2) "aaef11fbb2712346a386078c7f9834e72ed51e96"
-     * 
- * - * @return Long followed by the String (runid) - */ - @SuppressWarnings("unchecked") - public List sentinelIsMasterDownByAddr(String host, - int port) { - client.sentinel(Protocol.SENTINEL_IS_MASTER_DOWN_BY_ADDR, host, port); - final List reply = client.getObjectMultiBulkReply(); - return Arrays.asList(BuilderFactory.LONG.build(reply.get(0)), - BuilderFactory.STRING.build(reply.get(1))); - } - public byte[] dump(final String key) { - checkIsInMulti(); - client.dump(key); - return client.getBinaryBulkReply(); + checkIsInMulti(); + client.dump(key); + return client.getBinaryBulkReply(); } - - public String restore(final String key, final int ttl, final byte[] serializedValue) { - checkIsInMulti(); - client.restore(key, ttl, serializedValue); - return client.getStatusCodeReply(); + + public String restore(final String key, final int ttl, + final byte[] serializedValue) { + checkIsInMulti(); + client.restore(key, ttl, serializedValue); + return client.getStatusCodeReply(); } - + public Long pexpire(final String key, final int milliseconds) { - checkIsInMulti(); - client.pexpire(key, milliseconds); - return client.getIntegerReply(); + checkIsInMulti(); + client.pexpire(key, milliseconds); + return client.getIntegerReply(); } - + public Long pexpireAt(final String key, final long millisecondsTimestamp) { - checkIsInMulti(); - client.pexpireAt(key, millisecondsTimestamp); - return client.getIntegerReply(); + checkIsInMulti(); + client.pexpireAt(key, millisecondsTimestamp); + return client.getIntegerReply(); } - + public Long pttl(final String key) { - checkIsInMulti(); - client.pttl(key); - return client.getIntegerReply(); + checkIsInMulti(); + client.pttl(key); + return client.getIntegerReply(); } - + public Double incrByFloat(final String key, final double increment) { - checkIsInMulti(); - client.incrByFloat(key, increment); - String relpy = client.getBulkReply(); - return (relpy != null ? new Double(relpy) : null); + checkIsInMulti(); + client.incrByFloat(key, increment); + String relpy = client.getBulkReply(); + return (relpy != null ? new Double(relpy) : null); } - - public String psetex(final String key, final int milliseconds, final String value) { - checkIsInMulti(); - client.psetex(key, milliseconds, value); - return client.getStatusCodeReply(); + + public String psetex(final String key, final int milliseconds, + final String value) { + checkIsInMulti(); + client.psetex(key, milliseconds, value); + return client.getStatusCodeReply(); } - + public String set(final String key, final String value, final String nxxx) { - checkIsInMulti(); - client.set(key, value, nxxx); - return client.getStatusCodeReply(); + checkIsInMulti(); + client.set(key, value, nxxx); + return client.getStatusCodeReply(); } - - public String set(final String key, final String value, final String nxxx, final String expx, final int time) { - checkIsInMulti(); - client.set(key, value, nxxx, expx, time); - return client.getStatusCodeReply(); + + public String set(final String key, final String value, final String nxxx, + final String expx, final int time) { + checkIsInMulti(); + client.set(key, value, nxxx, expx, time); + return client.getStatusCodeReply(); } - + public String clientKill(final String client) { - checkIsInMulti(); - this.client.clientKill(client); - return this.client.getStatusCodeReply(); + checkIsInMulti(); + this.client.clientKill(client); + return this.client.getStatusCodeReply(); } - + public String clientSetname(final String name) { - checkIsInMulti(); - client.clientSetname(name); - return client.getStatusCodeReply(); + checkIsInMulti(); + client.clientSetname(name); + return client.getStatusCodeReply(); } - - public String migrate(final String host, final int port, final String key, final int destinationDb, final int timeout) { - checkIsInMulti(); - client.migrate(host, port, key, destinationDb, timeout); - return client.getStatusCodeReply(); + + public String migrate(final String host, final int port, final String key, + final int destinationDb, final int timeout) { + checkIsInMulti(); + client.migrate(host, port, key, destinationDb, timeout); + return client.getStatusCodeReply(); } - - public Double hincrByFloat(final String key, final String field, double increment) { - checkIsInMulti(); - client.hincrByFloat(key, field, increment); - String relpy = client.getBulkReply(); - return (relpy != null ? new Double(relpy) : null); + + public Double hincrByFloat(final String key, final String field, + double increment) { + checkIsInMulti(); + client.hincrByFloat(key, field, increment); + String relpy = client.getBulkReply(); + return (relpy != null ? new Double(relpy) : null); + } + + public ScanResult scan(int cursor) { + return scan(cursor, new ScanParams()); + } + + public ScanResult scan(int cursor, final ScanParams params) { + checkIsInMulti(); + client.scan(cursor, params); + List result = client.getObjectMultiBulkReply(); + int newcursor = Integer.parseInt(new String((byte[]) result.get(0))); + List results = new ArrayList(); + List rawResults = (List) result.get(1); + for (byte[] bs : rawResults) { + results.add(SafeEncoder.encode(bs)); + } + return new ScanResult(newcursor, results); + } + + public ScanResult> hscan(final String key, + int cursor) { + return hscan(key, cursor, new ScanParams()); + } + + public ScanResult> hscan(final String key, + int cursor, final ScanParams params) { + checkIsInMulti(); + client.hscan(key, cursor, params); + List result = client.getObjectMultiBulkReply(); + int newcursor = Integer.parseInt(new String((byte[]) result.get(0))); + List> results = new ArrayList>(); + List rawResults = (List) result.get(1); + Iterator iterator = rawResults.iterator(); + while (iterator.hasNext()) { + results.add(new AbstractMap.SimpleEntry(SafeEncoder + .encode(iterator.next()), SafeEncoder.encode(iterator + .next()))); + } + return new ScanResult>(newcursor, results); + } + + public ScanResult sscan(final String key, int cursor) { + return sscan(key, cursor, new ScanParams()); + } + + public ScanResult sscan(final String key, int cursor, + final ScanParams params) { + checkIsInMulti(); + client.sscan(key, cursor, params); + List result = client.getObjectMultiBulkReply(); + int newcursor = Integer.parseInt(new String((byte[]) result.get(0))); + List results = new ArrayList(); + List rawResults = (List) result.get(1); + for (byte[] bs : rawResults) { + results.add(SafeEncoder.encode(bs)); + } + return new ScanResult(newcursor, results); + } + + public ScanResult zscan(final String key, int cursor) { + return zscan(key, cursor, new ScanParams()); + } + + public ScanResult zscan(final String key, int cursor, + final ScanParams params) { + checkIsInMulti(); + client.zscan(key, cursor, params); + List result = client.getObjectMultiBulkReply(); + int newcursor = Integer.parseInt(new String((byte[]) result.get(0))); + List results = new ArrayList(); + List rawResults = (List) result.get(1); + Iterator iterator = rawResults.iterator(); + while (iterator.hasNext()) { + results.add(new Tuple(SafeEncoder.encode(iterator.next()), Double + .valueOf(SafeEncoder.encode(iterator.next())))); + } + return new ScanResult(newcursor, results); + } + + public String clusterNodes() { + checkIsInMulti(); + client.clusterNodes(); + return client.getBulkReply(); + } + + public String clusterMeet(final String ip, final int port) { + checkIsInMulti(); + client.clusterMeet(ip, port); + return client.getStatusCodeReply(); + } + + public String clusterAddSlots(final int... slots) { + checkIsInMulti(); + client.clusterAddSlots(slots); + return client.getStatusCodeReply(); + } + + public String clusterDelSlots(final int... slots) { + checkIsInMulti(); + client.clusterDelSlots(slots); + return client.getStatusCodeReply(); + } + + public String clusterInfo() { + checkIsInMulti(); + client.clusterInfo(); + return client.getStatusCodeReply(); + } + + public List clusterGetKeysInSlot(final int slot, final int count) { + checkIsInMulti(); + client.clusterGetKeysInSlot(slot, count); + return client.getMultiBulkReply(); + } + + public String clusterSetSlotNode(final int slot, final String nodeId) { + checkIsInMulti(); + client.clusterSetSlotNode(slot, nodeId); + return client.getStatusCodeReply(); + } + + public String clusterSetSlotMigrating(final int slot, final String nodeId) { + checkIsInMulti(); + client.clusterSetSlotMigrating(slot, nodeId); + return client.getStatusCodeReply(); + } + + public String clusterSetSlotImporting(final int slot, final String nodeId) { + checkIsInMulti(); + client.clusterSetSlotImporting(slot, nodeId); + return client.getStatusCodeReply(); + } + + public String asking() { + checkIsInMulti(); + client.asking(); + return client.getStatusCodeReply(); + } + + public List pubsubChannels(String pattern) { + checkIsInMulti(); + client.pubsubChannels(pattern); + return client.getMultiBulkReply(); + } + + public Long pubsubNumPat() { + checkIsInMulti(); + client.pubsubNumPat(); + return client.getIntegerReply(); + } + + public Map pubsubNumSub(String... channels) { + checkIsInMulti(); + client.pubsubNumSub(channels); + return BuilderFactory.STRING_MAP + .build(client.getBinaryMultiBulkReply()); } } diff --git a/src/main/java/redis/clients/jedis/JedisCluster.java b/src/main/java/redis/clients/jedis/JedisCluster.java new file mode 100644 index 0000000..ffa1115 --- /dev/null +++ b/src/main/java/redis/clients/jedis/JedisCluster.java @@ -0,0 +1,1432 @@ +package redis.clients.jedis; + +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; + +import redis.clients.jedis.BinaryClient.LIST_POSITION; + +public class JedisCluster implements JedisCommands, BasicCommands { + public static final short HASHSLOTS = 16384; + private static final int DEFAULT_TIMEOUT = 1; + private static final int DEFAULT_MAX_REDIRECTIONS = 5; + + private int timeout; + private int maxRedirections; + + private JedisClusterConnectionHandler connectionHandler; + + public JedisCluster(Set nodes, int timeout) { + this(nodes, timeout, DEFAULT_MAX_REDIRECTIONS); + } + + public JedisCluster(Set nodes) { + this(nodes, DEFAULT_TIMEOUT); + } + + public JedisCluster(Set jedisClusterNode, int timeout, + int maxRedirections) { + this.connectionHandler = new JedisSlotBasedConnectionHandler( + jedisClusterNode); + this.timeout = timeout; + this.maxRedirections = maxRedirections; + } + + @Override + public String set(final String key, final String value) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection().set(key, value); + } + }.run(key); + } + + @Override + public String get(final String key) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection().get(key); + } + }.run(key); + } + + @Override + public Boolean exists(final String key) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Boolean execute() { + return connectionHandler.getConnection().exists(key); + } + }.run(key); + } + + @Override + public Long persist(final String key) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().persist(key); + } + }.run(key); + } + + @Override + public String type(final String key) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection().type(key); + } + }.run(key); + } + + @Override + public Long expire(final String key, final int seconds) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().expire(key, seconds); + } + }.run(key); + } + + @Override + public Long expireAt(final String key, final long unixTime) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection() + .expireAt(key, unixTime); + } + }.run(key); + } + + @Override + public Long ttl(final String key) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().ttl(key); + } + }.run(key); + } + + @Override + public Boolean setbit(final String key, final long offset, + final boolean value) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Boolean execute() { + return connectionHandler.getConnection().setbit(key, offset, + value); + } + }.run(key); + } + + @Override + public Boolean setbit(final String key, final long offset, + final String value) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Boolean execute() { + return connectionHandler.getConnection().setbit(key, offset, + value); + } + }.run(key); + } + + @Override + public Boolean getbit(final String key, final long offset) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Boolean execute() { + return connectionHandler.getConnection().getbit(key, offset); + } + }.run(key); + } + + @Override + public Long setrange(final String key, final long offset, final String value) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().setrange(key, offset, + value); + } + }.run(key); + } + + @Override + public String getrange(final String key, final long startOffset, + final long endOffset) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection().getrange(key, + startOffset, endOffset); + } + }.run(key); + } + + @Override + public String getSet(final String key, final String value) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection().getSet(key, value); + } + }.run(key); + } + + @Override + public Long setnx(final String key, final String value) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().setnx(key, value); + } + }.run(key); + } + + @Override + public String setex(final String key, final int seconds, final String value) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection().setex(key, seconds, + value); + } + }.run(key); + } + + @Override + public Long decrBy(final String key, final long integer) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().decrBy(key, integer); + } + }.run(key); + } + + @Override + public Long decr(final String key) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().decr(key); + } + }.run(key); + } + + @Override + public Long incrBy(final String key, final long integer) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().incrBy(key, integer); + } + }.run(key); + } + + @Override + public Long incr(final String key) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().incr(key); + } + }.run(key); + } + + @Override + public Long append(final String key, final String value) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().append(key, value); + } + }.run(key); + } + + @Override + public String substr(final String key, final int start, final int end) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection() + .substr(key, start, end); + } + }.run(key); + } + + @Override + public Long hset(final String key, final String field, final String value) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection() + .hset(key, field, value); + } + }.run(key); + } + + @Override + public String hget(final String key, final String field) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection().hget(key, field); + } + }.run(key); + } + + @Override + public Long hsetnx(final String key, final String field, final String value) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().hsetnx(key, field, + value); + } + }.run(key); + } + + @Override + public String hmset(final String key, final Map hash) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection().hmset(key, hash); + } + }.run(key); + } + + @Override + public List hmget(final String key, final String... fields) { + return new JedisClusterCommand>(connectionHandler, + timeout, maxRedirections) { + @Override + public List execute() { + return connectionHandler.getConnection().hmget(key, fields); + } + }.run(key); + } + + @Override + public Long hincrBy(final String key, final String field, final long value) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().hincrBy(key, field, + value); + } + }.run(key); + } + + @Override + public Boolean hexists(final String key, final String field) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Boolean execute() { + return connectionHandler.getConnection().hexists(key, field); + } + }.run(key); + } + + @Override + public Long hdel(final String key, final String... field) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().hdel(key, field); + } + }.run(key); + } + + @Override + public Long hlen(final String key) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().hdel(key); + } + }.run(key); + } + + @Override + public Set hkeys(final String key) { + return new JedisClusterCommand>(connectionHandler, timeout, + maxRedirections) { + @Override + public Set execute() { + return connectionHandler.getConnection().hkeys(key); + } + }.run(key); + } + + @Override + public List hvals(final String key) { + return new JedisClusterCommand>(connectionHandler, + timeout, maxRedirections) { + @Override + public List execute() { + return connectionHandler.getConnection().hvals(key); + } + }.run(key); + } + + @Override + public Map hgetAll(final String key) { + return new JedisClusterCommand>(connectionHandler, + timeout, maxRedirections) { + @Override + public Map execute() { + return connectionHandler.getConnection().hgetAll(key); + } + }.run(key); + } + + @Override + public Long rpush(final String key, final String... string) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().rpush(key, string); + } + }.run(key); + } + + @Override + public Long lpush(final String key, final String... string) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().lpush(key, string); + } + }.run(key); + } + + @Override + public Long llen(final String key) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().llen(key); + } + }.run(key); + } + + @Override + public List lrange(final String key, final long start, + final long end) { + return new JedisClusterCommand>(connectionHandler, + timeout, maxRedirections) { + @Override + public List execute() { + return connectionHandler.getConnection() + .lrange(key, start, end); + } + }.run(key); + } + + @Override + public String ltrim(final String key, final long start, final long end) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection().ltrim(key, start, end); + } + }.run(key); + } + + @Override + public String lindex(final String key, final long index) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection().lindex(key, index); + } + }.run(key); + } + + @Override + public String lset(final String key, final long index, final String value) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection() + .lset(key, index, value); + } + }.run(key); + } + + @Override + public Long lrem(final String key, final long count, final String value) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection() + .lrem(key, count, value); + } + }.run(key); + } + + @Override + public String lpop(final String key) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection().lpop(key); + } + }.run(key); + } + + @Override + public String rpop(final String key) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection().rpop(key); + } + }.run(key); + } + + @Override + public Long sadd(final String key, final String... member) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().sadd(key, member); + } + }.run(key); + } + + @Override + public Set smembers(final String key) { + return new JedisClusterCommand>(connectionHandler, timeout, + maxRedirections) { + @Override + public Set execute() { + return connectionHandler.getConnection().smembers(key); + } + }.run(key); + } + + @Override + public Long srem(final String key, final String... member) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().srem(key, member); + } + }.run(key); + } + + @Override + public String spop(final String key) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection().spop(key); + } + }.run(key); + } + + @Override + public Long scard(final String key) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().scard(key); + } + }.run(key); + } + + @Override + public Boolean sismember(final String key, final String member) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Boolean execute() { + return connectionHandler.getConnection().sismember(key, member); + } + }.run(key); + } + + @Override + public String srandmember(final String key) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection().srandmember(key); + } + }.run(key); + } + + @Override + public Long strlen(final String key) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().strlen(key); + } + }.run(key); + } + + @Override + public Long zadd(final String key, final double score, final String member) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().zadd(key, score, + member); + } + }.run(key); + } + + @Override + public Long zadd(final String key, final Map scoreMembers) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection() + .zadd(key, scoreMembers); + } + }.run(key); + } + + @Override + public Set zrange(final String key, final long start, final long end) { + return new JedisClusterCommand>(connectionHandler, timeout, + maxRedirections) { + @Override + public Set execute() { + return connectionHandler.getConnection() + .zrange(key, start, end); + } + }.run(key); + } + + @Override + public Long zrem(final String key, final String... member) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().zrem(key, member); + } + }.run(key); + } + + @Override + public Double zincrby(final String key, final double score, + final String member) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Double execute() { + return connectionHandler.getConnection().zincrby(key, score, + member); + } + }.run(key); + } + + @Override + public Long zrank(final String key, final String member) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().zrank(key, member); + } + }.run(key); + } + + @Override + public Long zrevrank(final String key, final String member) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().zrevrank(key, member); + } + }.run(key); + } + + @Override + public Set zrevrange(final String key, final long start, + final long end) { + return new JedisClusterCommand>(connectionHandler, timeout, + maxRedirections) { + @Override + public Set execute() { + return connectionHandler.getConnection().zrevrange(key, start, + end); + } + }.run(key); + } + + @Override + public Set zrangeWithScores(final String key, final long start, + final long end) { + return new JedisClusterCommand>(connectionHandler, timeout, + maxRedirections) { + @Override + public Set execute() { + return connectionHandler.getConnection().zrangeWithScores(key, + start, end); + } + }.run(key); + } + + @Override + public Set zrevrangeWithScores(final String key, final long start, + final long end) { + return new JedisClusterCommand>(connectionHandler, timeout, + maxRedirections) { + @Override + public Set execute() { + return connectionHandler.getConnection().zrevrangeWithScores( + key, start, end); + } + }.run(key); + } + + @Override + public Long zcard(final String key) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().zcard(key); + } + }.run(key); + } + + @Override + public Double zscore(final String key, final String member) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Double execute() { + return connectionHandler.getConnection().zscore(key, member); + } + }.run(key); + } + + @Override + public List sort(final String key) { + return new JedisClusterCommand>(connectionHandler, + timeout, maxRedirections) { + @Override + public List execute() { + return connectionHandler.getConnection().sort(key); + } + }.run(key); + } + + @Override + public List sort(final String key, + final SortingParams sortingParameters) { + return new JedisClusterCommand>(connectionHandler, + timeout, maxRedirections) { + @Override + public List execute() { + return connectionHandler.getConnection().sort(key, + sortingParameters); + } + }.run(key); + } + + @Override + public Long zcount(final String key, final double min, final double max) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().zcount(key, min, max); + } + }.run(key); + } + + @Override + public Long zcount(final String key, final String min, final String max) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().zcount(key, min, max); + } + }.run(key); + } + + @Override + public Set zrangeByScore(final String key, final double min, + final double max) { + return new JedisClusterCommand>(connectionHandler, timeout, + maxRedirections) { + @Override + public Set execute() { + return connectionHandler.getConnection().zrangeByScore(key, + min, max); + } + }.run(key); + } + + @Override + public Set zrangeByScore(final String key, final String min, + final String max) { + return new JedisClusterCommand>(connectionHandler, timeout, + maxRedirections) { + @Override + public Set execute() { + return connectionHandler.getConnection().zrangeByScore(key, + min, max); + } + }.run(key); + } + + @Override + public Set zrevrangeByScore(final String key, final double max, + final double min) { + return new JedisClusterCommand>(connectionHandler, timeout, + maxRedirections) { + @Override + public Set execute() { + return connectionHandler.getConnection().zrevrangeByScore(key, + min, max); + } + }.run(key); + } + + @Override + public Set zrangeByScore(final String key, final double min, + final double max, final int offset, final int count) { + return new JedisClusterCommand>(connectionHandler, timeout, + maxRedirections) { + @Override + public Set execute() { + return connectionHandler.getConnection().zrangeByScore(key, + min, max, offset, count); + } + }.run(key); + } + + @Override + public Set zrevrangeByScore(final String key, final String max, + final String min) { + return new JedisClusterCommand>(connectionHandler, timeout, + maxRedirections) { + @Override + public Set execute() { + return connectionHandler.getConnection().zrevrangeByScore(key, + min, max); + } + }.run(key); + } + + @Override + public Set zrangeByScore(final String key, final String min, + final String max, final int offset, final int count) { + return new JedisClusterCommand>(connectionHandler, timeout, + maxRedirections) { + @Override + public Set execute() { + return connectionHandler.getConnection().zrangeByScore(key, + min, max, offset, count); + } + }.run(key); + } + + @Override + public Set zrevrangeByScore(final String key, final double max, + final double min, final int offset, final int count) { + return new JedisClusterCommand>(connectionHandler, timeout, + maxRedirections) { + @Override + public Set execute() { + return connectionHandler.getConnection().zrevrangeByScore(key, + min, max, offset, count); + } + }.run(key); + } + + @Override + public Set zrangeByScoreWithScores(final String key, + final double min, final double max) { + return new JedisClusterCommand>(connectionHandler, timeout, + maxRedirections) { + @Override + public Set execute() { + return connectionHandler.getConnection() + .zrangeByScoreWithScores(key, min, max); + } + }.run(key); + } + + @Override + public Set zrevrangeByScoreWithScores(final String key, + final double max, final double min) { + return new JedisClusterCommand>(connectionHandler, timeout, + maxRedirections) { + @Override + public Set execute() { + return connectionHandler.getConnection() + .zrevrangeByScoreWithScores(key, min, max); + } + }.run(key); + } + + @Override + public Set zrangeByScoreWithScores(final String key, + final double min, final double max, final int offset, + final int count) { + return new JedisClusterCommand>(connectionHandler, timeout, + maxRedirections) { + @Override + public Set execute() { + return connectionHandler.getConnection() + .zrangeByScoreWithScores(key, min, max, offset, count); + } + }.run(key); + } + + @Override + public Set zrevrangeByScore(final String key, final String max, + final String min, final int offset, final int count) { + return new JedisClusterCommand>(connectionHandler, timeout, + maxRedirections) { + @Override + public Set execute() { + return connectionHandler.getConnection().zrevrangeByScore(key, + min, max, offset, count); + } + }.run(key); + } + + @Override + public Set zrangeByScoreWithScores(final String key, + final String min, final String max) { + return new JedisClusterCommand>(connectionHandler, timeout, + maxRedirections) { + @Override + public Set execute() { + return connectionHandler.getConnection() + .zrangeByScoreWithScores(key, min, max); + } + }.run(key); + } + + @Override + public Set zrevrangeByScoreWithScores(final String key, + final String max, final String min) { + return new JedisClusterCommand>(connectionHandler, timeout, + maxRedirections) { + @Override + public Set execute() { + return connectionHandler.getConnection() + .zrevrangeByScoreWithScores(key, min, max); + } + }.run(key); + } + + @Override + public Set zrangeByScoreWithScores(final String key, + final String min, final String max, final int offset, + final int count) { + return new JedisClusterCommand>(connectionHandler, timeout, + maxRedirections) { + @Override + public Set execute() { + return connectionHandler.getConnection() + .zrangeByScoreWithScores(key, min, max, offset, count); + } + }.run(key); + } + + @Override + public Set zrevrangeByScoreWithScores(final String key, + final double max, final double min, final int offset, + final int count) { + return new JedisClusterCommand>(connectionHandler, timeout, + maxRedirections) { + @Override + public Set execute() { + return connectionHandler.getConnection() + .zrevrangeByScoreWithScores(key, max, min, offset, + count); + } + }.run(key); + } + + @Override + public Set zrevrangeByScoreWithScores(final String key, + final String max, final String min, final int offset, + final int count) { + return new JedisClusterCommand>(connectionHandler, timeout, + maxRedirections) { + @Override + public Set execute() { + return connectionHandler.getConnection() + .zrevrangeByScoreWithScores(key, max, min, offset, + count); + } + }.run(key); + } + + @Override + public Long zremrangeByRank(final String key, final long start, + final long end) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().zremrangeByRank(key, + start, end); + } + }.run(key); + } + + @Override + public Long zremrangeByScore(final String key, final double start, + final double end) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().zremrangeByScore(key, + start, end); + } + }.run(key); + } + + @Override + public Long zremrangeByScore(final String key, final String start, + final String end) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().zremrangeByScore(key, + start, end); + } + }.run(key); + } + + @Override + public Long linsert(final String key, final LIST_POSITION where, + final String pivot, final String value) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().linsert(key, where, + pivot, value); + } + }.run(key); + } + + @Override + public Long lpushx(final String key, final String... string) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().lpushx(key, string); + } + }.run(key); + } + + @Override + public Long rpushx(final String key, final String... string) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().rpushx(key, string); + } + }.run(key); + } + + @Override + public List blpop(final String arg) { + return new JedisClusterCommand>(connectionHandler, + timeout, maxRedirections) { + @Override + public List execute() { + return connectionHandler.getConnection().blpop(arg); + } + }.run(null); + } + + @Override + public List brpop(final String arg) { + return new JedisClusterCommand>(connectionHandler, + timeout, maxRedirections) { + @Override + public List execute() { + return connectionHandler.getConnection().brpop(arg); + } + }.run(null); + } + + @Override + public Long del(final String key) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().del(key); + } + }.run(null); + } + + @Override + public String echo(final String string) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection().echo(string); + } + }.run(null); + } + + @Override + public Long move(final String key, final int dbIndex) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().move(key, dbIndex); + } + }.run(key); + } + + @Override + public Long bitcount(final String key) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().bitcount(key); + } + }.run(key); + } + + @Override + public Long bitcount(final String key, final long start, final long end) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().bitcount(key, start, + end); + } + }.run(key); + } + + @Override + public String ping() { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection().ping(); + } + }.run(null); + } + + @Override + public String quit() { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection().quit(); + } + }.run(null); + } + + @Override + public String flushDB() { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection().flushDB(); + } + }.run(null); + } + + @Override + public Long dbSize() { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().dbSize(); + } + }.run(null); + } + + @Override + public String select(final int index) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection().select(index); + } + }.run(null); + } + + @Override + public String flushAll() { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection().flushAll(); + } + }.run(null); + } + + @Override + public String auth(final String password) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection().auth(password); + } + }.run(null); + } + + @Override + public String save() { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection().save(); + } + }.run(null); + } + + @Override + public String bgsave() { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection().bgsave(); + } + }.run(null); + } + + @Override + public String bgrewriteaof() { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection().bgrewriteaof(); + } + }.run(null); + } + + @Override + public Long lastsave() { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().lastsave(); + } + }.run(null); + } + + @Override + public String shutdown() { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection().shutdown(); + } + }.run(null); + } + + @Override + public String info() { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection().info(); + } + }.run(null); + } + + @Override + public String info(final String section) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection().info(section); + } + }.run(null); + } + + @Override + public String slaveof(final String host, final int port) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection().slaveof(host, port); + } + }.run(null); + } + + @Override + public String slaveofNoOne() { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection().slaveofNoOne(); + } + }.run(null); + } + + @Override + public Long getDB() { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public Long execute() { + return connectionHandler.getConnection().getDB(); + } + }.run(null); + } + + @Override + public String debug(final DebugParams params) { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection().debug(params); + } + }.run(null); + } + + @Override + public String configResetStat() { + return new JedisClusterCommand(connectionHandler, timeout, + maxRedirections) { + @Override + public String execute() { + return connectionHandler.getConnection().configResetStat(); + } + }.run(null); + } + + public Map getClusterNodes() { + return connectionHandler.getNodes(); + } + + @Override + public Long waitReplicas(int replicas, long timeout) { + // TODO Auto-generated method stub + return null; + } + + @Override + public ScanResult> hscan(final String key, + final int cursor) { + return new JedisClusterCommand>>( + connectionHandler, timeout, maxRedirections) { + @Override + public ScanResult> execute() { + return connectionHandler.getConnection().hscan(key, cursor); + } + }.run(null); + } + + @Override + public ScanResult sscan(final String key, final int cursor) { + return new JedisClusterCommand>(connectionHandler, + timeout, maxRedirections) { + @Override + public ScanResult execute() { + return connectionHandler.getConnection().sscan(key, cursor); + } + }.run(null); + } + + @Override + public ScanResult zscan(final String key, final int cursor) { + return new JedisClusterCommand>(connectionHandler, + timeout, maxRedirections) { + @Override + public ScanResult execute() { + return connectionHandler.getConnection().zscan(key, cursor); + } + }.run(null); + } +} diff --git a/src/main/java/redis/clients/jedis/JedisClusterCommand.java b/src/main/java/redis/clients/jedis/JedisClusterCommand.java new file mode 100644 index 0000000..41087a7 --- /dev/null +++ b/src/main/java/redis/clients/jedis/JedisClusterCommand.java @@ -0,0 +1,60 @@ +package redis.clients.jedis; + +import redis.clients.jedis.exceptions.JedisAskDataException; +import redis.clients.jedis.exceptions.JedisClusterException; +import redis.clients.jedis.exceptions.JedisClusterMaxRedirectionsException; +import redis.clients.jedis.exceptions.JedisRedirectionException; +import redis.clients.util.JedisClusterCRC16; + +public abstract class JedisClusterCommand { + + private boolean asking = false; + + private JedisClusterConnectionHandler connectionHandler; + private int commandTimeout; + private int redirections; + + // private boolean asking = false; + + public JedisClusterCommand(JedisClusterConnectionHandler connectionHandler, + int timeout, int maxRedirections) { + this.connectionHandler = connectionHandler; + this.commandTimeout = timeout; + this.redirections = maxRedirections; + } + + public abstract T execute(); + + public T run(String key) { + try { + + if (key == null) { + throw new JedisClusterException( + "No way to dispatch this command to Redis Cluster."); + } else if (redirections == 0) { + throw new JedisClusterMaxRedirectionsException( + "Too many Cluster redirections?"); + } + connectionHandler.getConnectionFromSlot(JedisClusterCRC16 + .getSlot(key)); + if (asking) { + // TODO: Pipeline asking with the original command to make it + // faster.... + connectionHandler.getConnection().asking(); + } + return execute(); + } catch (JedisRedirectionException jre) { + return handleRedirection(jre, key); + } + } + + private T handleRedirection(JedisRedirectionException jre, String key) { + if (jre instanceof JedisAskDataException) { + asking = true; + } + redirections--; + this.connectionHandler.assignSlotToNode(jre.getSlot(), + jre.getTargetNode()); + return run(key); + } +} \ No newline at end of file diff --git a/src/main/java/redis/clients/jedis/JedisClusterConnectionHandler.java b/src/main/java/redis/clients/jedis/JedisClusterConnectionHandler.java new file mode 100644 index 0000000..d30b5f7 --- /dev/null +++ b/src/main/java/redis/clients/jedis/JedisClusterConnectionHandler.java @@ -0,0 +1,92 @@ +package redis.clients.jedis; + +import java.util.HashMap; +import java.util.Map; +import java.util.Random; +import java.util.Set; + +public abstract class JedisClusterConnectionHandler { + + protected Map nodes = new HashMap(); + protected Map slots = new HashMap(); + + abstract Jedis getConnection(); + + abstract Jedis getConnectionFromSlot(int slot); + + public JedisClusterConnectionHandler(Set nodes) { + initializeSlotsCache(nodes); + } + + public Map getNodes() { + return nodes; + } + + private void initializeSlotsCache(Set nodes) { + for (HostAndPort hostAndPort : nodes) { + JedisPool jp = new JedisPool(hostAndPort.getHost(), + hostAndPort.getPort()); + this.nodes.put(hostAndPort.getHost() + hostAndPort.getPort(), jp); + Jedis jedis = jp.getResource(); + try { + discoverClusterNodesAndSlots(jedis); + } finally { + jp.returnResource(jedis); + } + } + } + + private void discoverClusterNodesAndSlots(Jedis jedis) { + String localNodes = jedis.clusterNodes(); + for (String nodeInfo : localNodes.split("\n")) { + HostAndPort node = getHostAndPortFromNodeLine(nodeInfo, jedis); + JedisPool nodePool = new JedisPool(node.getHost(), node.getPort()); + this.nodes.put(node.getHost() + node.getPort(), nodePool); + populateNodeSlots(nodeInfo, nodePool); + } + } + + private void populateNodeSlots(String nodeInfo, JedisPool nodePool) { + String[] nodeInfoArray = nodeInfo.split(" "); + if (nodeInfoArray.length > 7) { + for (int i = 8; i < nodeInfoArray.length; i++) { + processSlot(nodeInfoArray[i], nodePool); + } + } + } + + private void processSlot(String slot, JedisPool nodePool) { + if (slot.contains("-")) { + String[] slotRange = slot.split("-"); + for (int i = Integer.valueOf(slotRange[0]); i <= Integer + .valueOf(slotRange[1]); i++) { + slots.put(i, nodePool); + } + } else { + slots.put(Integer.valueOf(slot), nodePool); + } + } + + private HostAndPort getHostAndPortFromNodeLine(String nodeInfo, Jedis currentConnection) { + String stringHostAndPort = nodeInfo.split(" ", 3)[1]; + if (":0".equals(stringHostAndPort)) { + return new HostAndPort(currentConnection.getClient().getHost(), + currentConnection.getClient().getPort()); + } + String[] arrayHostAndPort = stringHostAndPort.split(":"); + return new HostAndPort(arrayHostAndPort[0], + Integer.valueOf(arrayHostAndPort[1])); + } + + public void assignSlotToNode(int slot, HostAndPort targetNode) { + JedisPool targetPool = nodes.get(targetNode.getHost() + + targetNode.getPort()); + slots.put(slot, targetPool); + } + + protected JedisPool getRandomConnection() { + Object[] nodeArray = nodes.values().toArray(); + return (JedisPool) (nodeArray[new Random().nextInt(nodeArray.length)]); + } + +} diff --git a/src/main/java/redis/clients/jedis/JedisCommands.java b/src/main/java/redis/clients/jedis/JedisCommands.java index a2bc07f..3077e68 100644 --- a/src/main/java/redis/clients/jedis/JedisCommands.java +++ b/src/main/java/redis/clients/jedis/JedisCommands.java @@ -7,8 +7,7 @@ import java.util.Set; /** * Common interface for sharded and non-sharded Jedis */ -public interface - JedisCommands { +public interface JedisCommands { String set(String key, String value); String get(String key); @@ -114,8 +113,8 @@ public interface Long strlen(String key); Long zadd(String key, double score, String member); - - Long zadd(String key, Map scoreMembers); + + Long zadd(String key, Map scoreMembers); Set zrange(String key, long start, long end); @@ -152,50 +151,50 @@ public interface Set zrevrangeByScore(String key, double max, double min); Set zrangeByScore(String key, double min, double max, int offset, - int count); + int count); Set zrevrangeByScore(String key, String max, String min); Set zrangeByScore(String key, String min, String max, int offset, - int count); + int count); Set zrevrangeByScore(String key, double max, double min, - int offset, int count); + int offset, int count); Set zrangeByScoreWithScores(String key, double min, double max); Set zrevrangeByScoreWithScores(String key, double max, double min); Set zrangeByScoreWithScores(String key, double min, double max, - int offset, int count); - + int offset, int count); + Set zrevrangeByScore(String key, String max, String min, - int offset, int count); + int offset, int count); Set zrangeByScoreWithScores(String key, String min, String max); - + Set zrevrangeByScoreWithScores(String key, String max, String min); Set zrangeByScoreWithScores(String key, String min, String max, - int offset, int count); + int offset, int count); Set zrevrangeByScoreWithScores(String key, double max, double min, - int offset, int count); - + int offset, int count); + Set zrevrangeByScoreWithScores(String key, String max, String min, - int offset, int count); + int offset, int count); Long zremrangeByRank(String key, long start, long end); Long zremrangeByScore(String key, double start, double end); - + Long zremrangeByScore(String key, String start, String end); Long linsert(String key, Client.LIST_POSITION where, String pivot, - String value); - + String value); + Long lpushx(String key, String... string); - + Long rpushx(String key, String... string); List blpop(String arg); @@ -211,4 +210,10 @@ public interface Long bitcount(final String key); Long bitcount(final String key, long start, long end); + + ScanResult> hscan(final String key, int cursor); + + ScanResult sscan(final String key, int cursor); + + ScanResult zscan(final String key, int cursor); } diff --git a/src/main/java/redis/clients/jedis/JedisFactory.java b/src/main/java/redis/clients/jedis/JedisFactory.java index 66592fe..3597d69 100644 --- a/src/main/java/redis/clients/jedis/JedisFactory.java +++ b/src/main/java/redis/clients/jedis/JedisFactory.java @@ -1,11 +1,13 @@ package redis.clients.jedis; -import org.apache.commons.pool.BasePoolableObjectFactory; +import org.apache.commons.pool2.PooledObject; +import org.apache.commons.pool2.PooledObjectFactory; +import org.apache.commons.pool2.impl.DefaultPooledObject; /** * PoolableObjectFactory custom impl. */ -class JedisFactory extends BasePoolableObjectFactory { +class JedisFactory implements PooledObjectFactory { private final String host; private final int port; private final int timeout; @@ -13,75 +15,80 @@ class JedisFactory extends BasePoolableObjectFactory { private final int database; private final String clientName; - public JedisFactory(final String host, final int port, - final int timeout, final String password, final int database) { - this(host, port, timeout, password, database, null); - } - public JedisFactory(final String host, final int port, - final int timeout, final String password, final int database, final String clientName) { - super(); - this.host = host; - this.port = port; - this.timeout = timeout; - this.password = password; - this.database = database; - this.clientName = clientName; + public JedisFactory(final String host, final int port, final int timeout, + final String password, final int database) { + this(host, port, timeout, password, database, null); } - public Object makeObject() throws Exception { - final Jedis jedis = new Jedis(this.host, this.port, this.timeout); - - jedis.connect(); - if (null != this.password) { - jedis.auth(this.password); - } - if( database != 0 ) { - jedis.select(database); - } - if ( clientName != null ) { - jedis.clientSetname(clientName); - } - - return jedis; + public JedisFactory(final String host, final int port, final int timeout, + final String password, final int database, final String clientName) { + super(); + this.host = host; + this.port = port; + this.timeout = timeout; + this.password = password; + this.database = database; + this.clientName = clientName; } @Override - public void activateObject(Object obj) throws Exception { - if (obj instanceof Jedis) { - final Jedis jedis = (Jedis)obj; - if (jedis.getDB() != database) { - jedis.select(database); - } + public void activateObject(PooledObject pooledJedis) + throws Exception { + final BinaryJedis jedis = pooledJedis.getObject(); + if (jedis.getDB() != database) { + jedis.select(database); + } + + } + + @Override + public void destroyObject(PooledObject pooledJedis) throws Exception { + final BinaryJedis jedis = pooledJedis.getObject(); + if (jedis.isConnected()) { + try { + try { + jedis.quit(); + } catch (Exception e) { } + jedis.disconnect(); + } catch (Exception e) { + + } + } + } - public void destroyObject(final Object obj) throws Exception { - if (obj instanceof Jedis) { - final Jedis jedis = (Jedis) obj; - if (jedis.isConnected()) { - try { - try { - jedis.quit(); - } catch (Exception e) { - } - jedis.disconnect(); - } catch (Exception e) { + @Override + public PooledObject makeObject() throws Exception { + final Jedis jedis = new Jedis(this.host, this.port, this.timeout); - } - } - } + jedis.connect(); + if (null != this.password) { + jedis.auth(this.password); + } + if (database != 0) { + jedis.select(database); + } + if (clientName != null) { + jedis.clientSetname(clientName); + } + + return new DefaultPooledObject(jedis); } - public boolean validateObject(final Object obj) { - if (obj instanceof Jedis) { - final Jedis jedis = (Jedis) obj; - try { - return jedis.isConnected() && jedis.ping().equals("PONG"); - } catch (final Exception e) { - return false; - } - } else { - return false; - } + @Override + public void passivateObject(PooledObject pooledJedis) + throws Exception { + // TODO maybe should select db 0? Not sure right now. + } + + @Override + public boolean validateObject(PooledObject pooledJedis) { + final BinaryJedis jedis = pooledJedis.getObject(); + try { + return jedis.isConnected() && jedis.ping().equals("PONG"); + } catch (final Exception e) { + return false; + } } } \ No newline at end of file diff --git a/src/main/java/redis/clients/jedis/JedisMonitor.java b/src/main/java/redis/clients/jedis/JedisMonitor.java index dff2672..cd8e802 100644 --- a/src/main/java/redis/clients/jedis/JedisMonitor.java +++ b/src/main/java/redis/clients/jedis/JedisMonitor.java @@ -4,12 +4,12 @@ public abstract class JedisMonitor { protected Client client; public void proceed(Client client) { - this.client = client; - this.client.setTimeoutInfinite(); - do { - String command = client.getBulkReply(); - onCommand(command); - } while (client.isConnected()); + this.client = client; + this.client.setTimeoutInfinite(); + do { + String command = client.getBulkReply(); + onCommand(command); + } while (client.isConnected()); } public abstract void onCommand(String command); diff --git a/src/main/java/redis/clients/jedis/JedisPool.java b/src/main/java/redis/clients/jedis/JedisPool.java index 6e8b74d..6b2c80c 100644 --- a/src/main/java/redis/clients/jedis/JedisPool.java +++ b/src/main/java/redis/clients/jedis/JedisPool.java @@ -2,19 +2,21 @@ package redis.clients.jedis; import java.net.URI; -import org.apache.commons.pool.impl.GenericObjectPool; -import org.apache.commons.pool.impl.GenericObjectPool.Config; +import org.apache.commons.pool2.impl.GenericObjectPool; +import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import redis.clients.util.Pool; public class JedisPool extends Pool { - public JedisPool(final Config poolConfig, final String host) { - this(poolConfig, host, Protocol.DEFAULT_PORT, Protocol.DEFAULT_TIMEOUT, null, Protocol.DEFAULT_DATABASE, null); + public JedisPool(final GenericObjectPoolConfig poolConfig, final String host) { + this(poolConfig, host, Protocol.DEFAULT_PORT, Protocol.DEFAULT_TIMEOUT, + null, Protocol.DEFAULT_DATABASE, null); } public JedisPool(String host, int port) { - this(new Config(), host, port, Protocol.DEFAULT_TIMEOUT, null, Protocol.DEFAULT_DATABASE, null); + this(new GenericObjectPoolConfig(), host, port, + Protocol.DEFAULT_TIMEOUT, null, Protocol.DEFAULT_DATABASE, null); } public JedisPool(final String host) { @@ -24,12 +26,15 @@ public class JedisPool extends Pool { int port = uri.getPort(); String password = uri.getUserInfo().split(":", 2)[1]; int database = Integer.parseInt(uri.getPath().split("/", 2)[1]); - this.internalPool = new GenericObjectPool(new JedisFactory(h, port, - Protocol.DEFAULT_TIMEOUT, password, database, null), new Config()); + this.internalPool = new GenericObjectPool( + new JedisFactory(h, port, Protocol.DEFAULT_TIMEOUT, + password, database, null), + new GenericObjectPoolConfig()); } else { - this.internalPool = new GenericObjectPool(new JedisFactory(host, - Protocol.DEFAULT_PORT, Protocol.DEFAULT_TIMEOUT, null, - Protocol.DEFAULT_DATABASE, null), new Config()); + this.internalPool = new GenericObjectPool(new JedisFactory( + host, Protocol.DEFAULT_PORT, Protocol.DEFAULT_TIMEOUT, + null, Protocol.DEFAULT_DATABASE, null), + new GenericObjectPoolConfig()); } } @@ -38,39 +43,48 @@ public class JedisPool extends Pool { int port = uri.getPort(); String password = uri.getUserInfo().split(":", 2)[1]; int database = Integer.parseInt(uri.getPath().split("/", 2)[1]); - this.internalPool = new GenericObjectPool(new JedisFactory(h, port, - Protocol.DEFAULT_TIMEOUT, password, database, null), new Config()); + this.internalPool = new GenericObjectPool(new JedisFactory(h, + port, Protocol.DEFAULT_TIMEOUT, password, database, null), + new GenericObjectPoolConfig()); } - public JedisPool(final Config poolConfig, final String host, int port, - int timeout, final String password) { - this(poolConfig, host, port, timeout, password, Protocol.DEFAULT_DATABASE, null); + public JedisPool(final GenericObjectPoolConfig poolConfig, + final String host, int port, int timeout, final String password) { + this(poolConfig, host, port, timeout, password, + Protocol.DEFAULT_DATABASE, null); } - public JedisPool(final Config poolConfig, final String host, final int port) { - this(poolConfig, host, port, Protocol.DEFAULT_TIMEOUT, null, Protocol.DEFAULT_DATABASE, null); + public JedisPool(final GenericObjectPoolConfig poolConfig, + final String host, final int port) { + this(poolConfig, host, port, Protocol.DEFAULT_TIMEOUT, null, + Protocol.DEFAULT_DATABASE, null); } - public JedisPool(final Config poolConfig, final String host, final int port, final int timeout) { - this(poolConfig, host, port, timeout, null, Protocol.DEFAULT_DATABASE, null); + public JedisPool(final GenericObjectPoolConfig poolConfig, + final String host, final int port, final int timeout) { + this(poolConfig, host, port, timeout, null, Protocol.DEFAULT_DATABASE, + null); } - public JedisPool(final Config poolConfig, final String host, int port, int timeout, final String password, - final int database) { - this(poolConfig, host, port, timeout, password, database, null); + public JedisPool(final GenericObjectPoolConfig poolConfig, + final String host, int port, int timeout, final String password, + final int database) { + this(poolConfig, host, port, timeout, password, database, null); } - public JedisPool(final Config poolConfig, final String host, int port, int timeout, final String password, - final int database, final String clientName) { - super(poolConfig, new JedisFactory(host, port, timeout, password, database, clientName)); + public JedisPool(final GenericObjectPoolConfig poolConfig, + final String host, int port, int timeout, final String password, + final int database, final String clientName) { + super(poolConfig, new JedisFactory(host, port, timeout, password, + database, clientName)); } - - public void returnBrokenResource(final BinaryJedis resource) { - returnBrokenResourceObject(resource); + public void returnBrokenResource(final Jedis resource) { + returnBrokenResourceObject(resource); } - public void returnResource(final BinaryJedis resource) { - returnResourceObject(resource); + public void returnResource(final Jedis resource) { + resource.resetState(); + returnResourceObject(resource); } } diff --git a/src/main/java/redis/clients/jedis/JedisPoolConfig.java b/src/main/java/redis/clients/jedis/JedisPoolConfig.java index b079c07..5efdde8 100644 --- a/src/main/java/redis/clients/jedis/JedisPoolConfig.java +++ b/src/main/java/redis/clients/jedis/JedisPoolConfig.java @@ -1,132 +1,13 @@ package redis.clients.jedis; -import org.apache.commons.pool.impl.GenericObjectPool.Config; +import org.apache.commons.pool2.impl.GenericObjectPoolConfig; -/** - * Subclass of org.apache.commons.pool.impl.GenericObjectPool.Config that - * includes getters/setters so it can be more easily configured by Spring and - * other IoC frameworks. - * - * Spring example: - * - * - * - * - * - * - * For information on parameters refer to: - * - * http://commons.apache.org/pool/apidocs/org/apache/commons/pool/impl/ - * GenericObjectPool.html - */ -public class JedisPoolConfig extends Config { +public class JedisPoolConfig extends GenericObjectPoolConfig { public JedisPoolConfig() { - // defaults to make your life with connection pool easier :) - setTestWhileIdle(true); - setMinEvictableIdleTimeMillis(60000); - setTimeBetweenEvictionRunsMillis(30000); - setNumTestsPerEvictionRun(-1); + // defaults to make your life with connection pool easier :) + setTestWhileIdle(true); + setMinEvictableIdleTimeMillis(60000); + setTimeBetweenEvictionRunsMillis(30000); + setNumTestsPerEvictionRun(-1); } - - public int getMaxIdle() { - return maxIdle; - } - - public void setMaxIdle(int maxIdle) { - this.maxIdle = maxIdle; - } - - public int getMinIdle() { - return minIdle; - } - - public void setMinIdle(int minIdle) { - this.minIdle = minIdle; - } - - public int getMaxActive() { - return maxActive; - } - - public void setMaxActive(int maxActive) { - this.maxActive = maxActive; - } - - public long getMaxWait() { - return maxWait; - } - - public void setMaxWait(long maxWait) { - this.maxWait = maxWait; - } - - public byte getWhenExhaustedAction() { - return whenExhaustedAction; - } - - public void setWhenExhaustedAction(byte whenExhaustedAction) { - this.whenExhaustedAction = whenExhaustedAction; - } - - public boolean isTestOnBorrow() { - return testOnBorrow; - } - - public void setTestOnBorrow(boolean testOnBorrow) { - this.testOnBorrow = testOnBorrow; - } - - public boolean isTestOnReturn() { - return testOnReturn; - } - - public void setTestOnReturn(boolean testOnReturn) { - this.testOnReturn = testOnReturn; - } - - public boolean isTestWhileIdle() { - return testWhileIdle; - } - - public void setTestWhileIdle(boolean testWhileIdle) { - this.testWhileIdle = testWhileIdle; - } - - public long getTimeBetweenEvictionRunsMillis() { - return timeBetweenEvictionRunsMillis; - } - - public void setTimeBetweenEvictionRunsMillis( - long timeBetweenEvictionRunsMillis) { - this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis; - } - - public int getNumTestsPerEvictionRun() { - return numTestsPerEvictionRun; - } - - public void setNumTestsPerEvictionRun(int numTestsPerEvictionRun) { - this.numTestsPerEvictionRun = numTestsPerEvictionRun; - } - - public long getMinEvictableIdleTimeMillis() { - return minEvictableIdleTimeMillis; - } - - public void setMinEvictableIdleTimeMillis(long minEvictableIdleTimeMillis) { - this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis; - } - - public long getSoftMinEvictableIdleTimeMillis() { - return softMinEvictableIdleTimeMillis; - } - - public void setSoftMinEvictableIdleTimeMillis( - long softMinEvictableIdleTimeMillis) { - this.softMinEvictableIdleTimeMillis = softMinEvictableIdleTimeMillis; - } - } diff --git a/src/main/java/redis/clients/jedis/JedisPubSub.java b/src/main/java/redis/clients/jedis/JedisPubSub.java index d07a409..7dfcf07 100644 --- a/src/main/java/redis/clients/jedis/JedisPubSub.java +++ b/src/main/java/redis/clients/jedis/JedisPubSub.java @@ -16,12 +16,12 @@ import redis.clients.util.SafeEncoder; public abstract class JedisPubSub { private int subscribedChannels = 0; - private Client client; + private volatile Client client; public abstract void onMessage(String channel, String message); public abstract void onPMessage(String pattern, String channel, - String message); + String message); public abstract void onSubscribe(String channel, int subscribedChannels); @@ -32,115 +32,145 @@ public abstract class JedisPubSub { public abstract void onPSubscribe(String pattern, int subscribedChannels); public void unsubscribe() { - if (client == null) { - throw new JedisConnectionException( - "JedisPubSub was not subscribed to a Jedis instance."); - } - client.unsubscribe(); - client.flush(); + if (client == null) { + throw new JedisConnectionException( + "JedisPubSub was not subscribed to a Jedis instance."); + } + client.unsubscribe(); + client.flush(); } public void unsubscribe(String... channels) { - client.unsubscribe(channels); - client.flush(); + if (client == null) { + throw new JedisConnectionException( + "JedisPubSub is not subscribed to a Jedis instance."); + } + client.unsubscribe(channels); + client.flush(); } public void subscribe(String... channels) { - client.subscribe(channels); - client.flush(); + if (client == null) { + throw new JedisConnectionException( + "JedisPubSub is not subscribed to a Jedis instance."); + } + client.subscribe(channels); + client.flush(); } public void psubscribe(String... patterns) { - client.psubscribe(patterns); - client.flush(); + if (client == null) { + throw new JedisConnectionException( + "JedisPubSub is not subscribed to a Jedis instance."); + } + client.psubscribe(patterns); + client.flush(); } public void punsubscribe() { - client.punsubscribe(); - client.flush(); + if (client == null) { + throw new JedisConnectionException( + "JedisPubSub is not subscribed to a Jedis instance."); + } + client.punsubscribe(); + client.flush(); } public void punsubscribe(String... patterns) { - client.punsubscribe(patterns); - client.flush(); + if (client == null) { + throw new JedisConnectionException( + "JedisPubSub is not subscribed to a Jedis instance."); + } + client.punsubscribe(patterns); + client.flush(); } public boolean isSubscribed() { - return subscribedChannels > 0; + return subscribedChannels > 0; } public void proceedWithPatterns(Client client, String... patterns) { - this.client = client; - client.psubscribe(patterns); - client.flush(); - process(client); + this.client = client; + client.psubscribe(patterns); + client.flush(); + process(client); } public void proceed(Client client, String... channels) { - this.client = client; - client.subscribe(channels); - client.flush(); - process(client); + this.client = client; + client.subscribe(channels); + client.flush(); + process(client); } private void process(Client client) { - do { - List reply = client.getObjectMultiBulkReply(); - final Object firstObj = reply.get(0); - if (!(firstObj instanceof byte[])) { - throw new JedisException("Unknown message type: " + firstObj); - } - final byte[] resp = (byte[]) firstObj; - if (Arrays.equals(SUBSCRIBE.raw, resp)) { - subscribedChannels = ((Long) reply.get(2)).intValue(); - final byte[] bchannel = (byte[]) reply.get(1); - final String strchannel = (bchannel == null) ? null - : SafeEncoder.encode(bchannel); - onSubscribe(strchannel, subscribedChannels); - } else if (Arrays.equals(UNSUBSCRIBE.raw, resp)) { - subscribedChannels = ((Long) reply.get(2)).intValue(); - final byte[] bchannel = (byte[]) reply.get(1); - final String strchannel = (bchannel == null) ? null - : SafeEncoder.encode(bchannel); - onUnsubscribe(strchannel, subscribedChannels); - } else if (Arrays.equals(MESSAGE.raw, resp)) { - final byte[] bchannel = (byte[]) reply.get(1); - final byte[] bmesg = (byte[]) reply.get(2); - final String strchannel = (bchannel == null) ? null - : SafeEncoder.encode(bchannel); - final String strmesg = (bmesg == null) ? null : SafeEncoder - .encode(bmesg); - onMessage(strchannel, strmesg); - } else if (Arrays.equals(PMESSAGE.raw, resp)) { - final byte[] bpattern = (byte[]) reply.get(1); - final byte[] bchannel = (byte[]) reply.get(2); - final byte[] bmesg = (byte[]) reply.get(3); - final String strpattern = (bpattern == null) ? null - : SafeEncoder.encode(bpattern); - final String strchannel = (bchannel == null) ? null - : SafeEncoder.encode(bchannel); - final String strmesg = (bmesg == null) ? null : SafeEncoder - .encode(bmesg); - onPMessage(strpattern, strchannel, strmesg); - } else if (Arrays.equals(PSUBSCRIBE.raw, resp)) { - subscribedChannels = ((Long) reply.get(2)).intValue(); - final byte[] bpattern = (byte[]) reply.get(1); - final String strpattern = (bpattern == null) ? null - : SafeEncoder.encode(bpattern); - onPSubscribe(strpattern, subscribedChannels); - } else if (Arrays.equals(PUNSUBSCRIBE.raw, resp)) { - subscribedChannels = ((Long) reply.get(2)).intValue(); - final byte[] bpattern = (byte[]) reply.get(1); - final String strpattern = (bpattern == null) ? null - : SafeEncoder.encode(bpattern); - onPUnsubscribe(strpattern, subscribedChannels); - } else { - throw new JedisException("Unknown message type: " + firstObj); - } - } while (isSubscribed()); + + do { + List reply = client.getRawObjectMultiBulkReply(); + final Object firstObj = reply.get(0); + if (!(firstObj instanceof byte[])) { + throw new JedisException("Unknown message type: " + firstObj); + } + final byte[] resp = (byte[]) firstObj; + if (Arrays.equals(SUBSCRIBE.raw, resp)) { + subscribedChannels = ((Long) reply.get(2)).intValue(); + final byte[] bchannel = (byte[]) reply.get(1); + final String strchannel = (bchannel == null) ? null + : SafeEncoder.encode(bchannel); + onSubscribe(strchannel, subscribedChannels); + } else if (Arrays.equals(UNSUBSCRIBE.raw, resp)) { + subscribedChannels = ((Long) reply.get(2)).intValue(); + final byte[] bchannel = (byte[]) reply.get(1); + final String strchannel = (bchannel == null) ? null + : SafeEncoder.encode(bchannel); + onUnsubscribe(strchannel, subscribedChannels); + } else if (Arrays.equals(MESSAGE.raw, resp)) { + final byte[] bchannel = (byte[]) reply.get(1); + final byte[] bmesg = (byte[]) reply.get(2); + final String strchannel = (bchannel == null) ? null + : SafeEncoder.encode(bchannel); + final String strmesg = (bmesg == null) ? null : SafeEncoder + .encode(bmesg); + onMessage(strchannel, strmesg); + } else if (Arrays.equals(PMESSAGE.raw, resp)) { + final byte[] bpattern = (byte[]) reply.get(1); + final byte[] bchannel = (byte[]) reply.get(2); + final byte[] bmesg = (byte[]) reply.get(3); + final String strpattern = (bpattern == null) ? null + : SafeEncoder.encode(bpattern); + final String strchannel = (bchannel == null) ? null + : SafeEncoder.encode(bchannel); + final String strmesg = (bmesg == null) ? null : SafeEncoder + .encode(bmesg); + onPMessage(strpattern, strchannel, strmesg); + } else if (Arrays.equals(PSUBSCRIBE.raw, resp)) { + subscribedChannels = ((Long) reply.get(2)).intValue(); + final byte[] bpattern = (byte[]) reply.get(1); + final String strpattern = (bpattern == null) ? null + : SafeEncoder.encode(bpattern); + onPSubscribe(strpattern, subscribedChannels); + } else if (Arrays.equals(PUNSUBSCRIBE.raw, resp)) { + subscribedChannels = ((Long) reply.get(2)).intValue(); + final byte[] bpattern = (byte[]) reply.get(1); + final String strpattern = (bpattern == null) ? null + : SafeEncoder.encode(bpattern); + onPUnsubscribe(strpattern, subscribedChannels); + } else { + throw new JedisException("Unknown message type: " + firstObj); + } + } while (isSubscribed()); + + /* Invalidate instance since this thread is no longer listening */ + this.client = null; + + /* + * Reset pipeline count because subscribe() calls would have increased + * it but nothing decremented it. + */ + client.resetPipelinedCount(); } public int getSubscribedChannels() { - return subscribedChannels; + return subscribedChannels; } -} \ No newline at end of file +} diff --git a/src/main/java/redis/clients/jedis/JedisRandomConnectionHandler.java b/src/main/java/redis/clients/jedis/JedisRandomConnectionHandler.java new file mode 100644 index 0000000..d4e558e --- /dev/null +++ b/src/main/java/redis/clients/jedis/JedisRandomConnectionHandler.java @@ -0,0 +1,19 @@ +package redis.clients.jedis; + +import java.util.Set; + +public class JedisRandomConnectionHandler extends JedisClusterConnectionHandler { + + public JedisRandomConnectionHandler(Set nodes) { + super(nodes); + } + + public Jedis getConnection() { + return getRandomConnection().getResource(); + } + + @Override + Jedis getConnectionFromSlot(int slot) { + return getRandomConnection().getResource(); + } +} diff --git a/src/main/java/redis/clients/jedis/JedisSentinelPool.java b/src/main/java/redis/clients/jedis/JedisSentinelPool.java index 0d87bdd..4fe5433 100644 --- a/src/main/java/redis/clients/jedis/JedisSentinelPool.java +++ b/src/main/java/redis/clients/jedis/JedisSentinelPool.java @@ -7,14 +7,14 @@ import java.util.Set; import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Logger; -import org.apache.commons.pool.impl.GenericObjectPool.Config; +import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import redis.clients.jedis.exceptions.JedisConnectionException; import redis.clients.util.Pool; public class JedisSentinelPool extends Pool { - protected Config poolConfig; + protected GenericObjectPoolConfig poolConfig; protected int timeout = Protocol.DEFAULT_TIMEOUT; @@ -27,79 +27,62 @@ public class JedisSentinelPool extends Pool { protected Logger log = Logger.getLogger(getClass().getName()); public JedisSentinelPool(String masterName, Set sentinels, - final Config poolConfig) { + final GenericObjectPoolConfig poolConfig) { this(masterName, sentinels, poolConfig, Protocol.DEFAULT_TIMEOUT, null, Protocol.DEFAULT_DATABASE); } public JedisSentinelPool(String masterName, Set sentinels) { - this(masterName, sentinels, new Config(), Protocol.DEFAULT_TIMEOUT, - null, Protocol.DEFAULT_DATABASE); + this(masterName, sentinels, new GenericObjectPoolConfig(), + Protocol.DEFAULT_TIMEOUT, null, Protocol.DEFAULT_DATABASE); } public JedisSentinelPool(String masterName, Set sentinels, String password) { - this(masterName, sentinels, new Config(), Protocol.DEFAULT_TIMEOUT, - password); + this(masterName, sentinels, new GenericObjectPoolConfig(), + Protocol.DEFAULT_TIMEOUT, password); } public JedisSentinelPool(String masterName, Set sentinels, - final Config poolConfig, int timeout, final String password) { + final GenericObjectPoolConfig poolConfig, int timeout, + final String password) { this(masterName, sentinels, poolConfig, timeout, password, Protocol.DEFAULT_DATABASE); } public JedisSentinelPool(String masterName, Set sentinels, - final Config poolConfig, final int timeout) { + final GenericObjectPoolConfig poolConfig, final int timeout) { this(masterName, sentinels, poolConfig, timeout, null, Protocol.DEFAULT_DATABASE); } public JedisSentinelPool(String masterName, Set sentinels, - final Config poolConfig, final String password) { + final GenericObjectPoolConfig poolConfig, final String password) { this(masterName, sentinels, poolConfig, Protocol.DEFAULT_TIMEOUT, password); } public JedisSentinelPool(String masterName, Set sentinels, - final Config poolConfig, int timeout, final String password, - final int database) { + final GenericObjectPoolConfig poolConfig, int timeout, + final String password, final int database) { this.poolConfig = poolConfig; this.timeout = timeout; this.password = password; this.database = database; - + HostAndPort master = initSentinels(sentinels, masterName); initPool(master); } - public void returnBrokenResource(final BinaryJedis resource) { + public void returnBrokenResource(final Jedis resource) { returnBrokenResourceObject(resource); } - public void returnResource(final BinaryJedis resource) { + public void returnResource(final Jedis resource) { + resource.resetState(); returnResourceObject(resource); } - private class HostAndPort { - String host; - int port; - - @Override - public boolean equals(Object obj) { - if (obj instanceof HostAndPort) { - HostAndPort hp = (HostAndPort) obj; - return port == hp.port && host.equals(hp.host); - } - return false; - } - - @Override - public String toString() { - return host + ":" + port; - } - } - private volatile HostAndPort currentHostMaster; public void destroy() { @@ -118,8 +101,9 @@ public class JedisSentinelPool extends Pool { if (!master.equals(currentHostMaster)) { currentHostMaster = master; log.info("Created JedisPool to master at " + master); - initPool(poolConfig, new JedisFactory(master.host, master.port, - timeout, password, database)); + initPool(poolConfig, + new JedisFactory(master.getHost(), master.getPort(), + timeout, password, database)); } } @@ -141,7 +125,7 @@ public class JedisSentinelPool extends Pool { log.fine("Connecting to Sentinel " + hap); try { - Jedis jedis = new Jedis(hap.host, hap.port); + Jedis jedis = new Jedis(hap.getHost(), hap.getPort()); if (master == null) { master = toHostAndPort(jedis @@ -172,7 +156,7 @@ public class JedisSentinelPool extends Pool { final HostAndPort hap = toHostAndPort(Arrays.asList(sentinel .split(":"))); MasterListener masterListener = new MasterListener(masterName, - hap.host, hap.port); + hap.getHost(), hap.getPort()); masterListeners.add(masterListener); masterListener.start(); } @@ -181,10 +165,10 @@ public class JedisSentinelPool extends Pool { } private HostAndPort toHostAndPort(List getMasterAddrByNameResult) { - final HostAndPort hap = new HostAndPort(); - hap.host = getMasterAddrByNameResult.get(0); - hap.port = Integer.parseInt(getMasterAddrByNameResult.get(1)); - return hap; + String host = getMasterAddrByNameResult.get(0); + int port = Integer.parseInt(getMasterAddrByNameResult.get(1)); + + return new HostAndPort(host, port); } protected class JedisPubSubAdapter extends JedisPubSub { diff --git a/src/main/java/redis/clients/jedis/JedisSlotBasedConnectionHandler.java b/src/main/java/redis/clients/jedis/JedisSlotBasedConnectionHandler.java new file mode 100644 index 0000000..4aba893 --- /dev/null +++ b/src/main/java/redis/clients/jedis/JedisSlotBasedConnectionHandler.java @@ -0,0 +1,46 @@ +package redis.clients.jedis; + +import java.util.Set; + +public class JedisSlotBasedConnectionHandler extends + JedisClusterConnectionHandler { + + private Jedis currentConnection; + + public JedisSlotBasedConnectionHandler(Set nodes) { + super(nodes); + } + + public Jedis getConnection() { + return currentConnection != null ? currentConnection + : getRandomConnection().getResource(); + } + + private void returnCurrentConnection() { + if (currentConnection != null) { + nodes.get( + currentConnection.getClient().getHost() + + currentConnection.getClient().getPort()) + .returnResource(currentConnection); + } + + } + + @Override + public void assignSlotToNode(int slot, HostAndPort targetNode) { + super.assignSlotToNode(slot, targetNode); + getConnectionFromSlot(slot); + } + + @Override + public Jedis getConnectionFromSlot(int slot) { + returnCurrentConnection(); + JedisPool connectionPool = slots.get(slot); + if (connectionPool == null) { + connectionPool = getRandomConnection(); + } + currentConnection = connectionPool.getResource(); + return connectionPool.getResource(); + } + +} diff --git a/src/main/java/redis/clients/jedis/MultiKeyBinaryCommands.java b/src/main/java/redis/clients/jedis/MultiKeyBinaryCommands.java index 1b3c158..e6ea8fd 100644 --- a/src/main/java/redis/clients/jedis/MultiKeyBinaryCommands.java +++ b/src/main/java/redis/clients/jedis/MultiKeyBinaryCommands.java @@ -1,6 +1,5 @@ package redis.clients.jedis; - import java.util.List; import java.util.Set; diff --git a/src/main/java/redis/clients/jedis/MultiKeyBinaryRedisPipeline.java b/src/main/java/redis/clients/jedis/MultiKeyBinaryRedisPipeline.java index d77ddd9..fd71016 100644 --- a/src/main/java/redis/clients/jedis/MultiKeyBinaryRedisPipeline.java +++ b/src/main/java/redis/clients/jedis/MultiKeyBinaryRedisPipeline.java @@ -1,16 +1,16 @@ package redis.clients.jedis; - import java.util.List; import java.util.Set; /** - * Multikey related commands (these are split out because they are non-shardable) + * Multikey related commands (these are split out because they are + * non-shardable) */ public interface MultiKeyBinaryRedisPipeline { Response del(byte[]... keys); - + Response> blpop(byte[]... args); Response> brpop(byte[]... args); @@ -39,7 +39,8 @@ public interface MultiKeyBinaryRedisPipeline { Response smove(byte[] srckey, byte[] dstkey, byte[] member); - Response sort(byte[] key, SortingParams sortingParameters, byte[] dstkey); + Response sort(byte[] key, SortingParams sortingParameters, + byte[] dstkey); Response sort(byte[] key, byte[] dstkey); diff --git a/src/main/java/redis/clients/jedis/MultiKeyCommands.java b/src/main/java/redis/clients/jedis/MultiKeyCommands.java index c98017f..3565c6d 100644 --- a/src/main/java/redis/clients/jedis/MultiKeyCommands.java +++ b/src/main/java/redis/clients/jedis/MultiKeyCommands.java @@ -1,6 +1,5 @@ package redis.clients.jedis; - import java.util.List; import java.util.Set; @@ -70,4 +69,6 @@ public interface MultiKeyCommands { String randomKey(); Long bitop(BitOP op, final String destKey, String... srcKeys); + + ScanResult scan(int cursor); } diff --git a/src/main/java/redis/clients/jedis/MultiKeyCommandsPipeline.java b/src/main/java/redis/clients/jedis/MultiKeyCommandsPipeline.java index ee9af65..92c8d5a 100644 --- a/src/main/java/redis/clients/jedis/MultiKeyCommandsPipeline.java +++ b/src/main/java/redis/clients/jedis/MultiKeyCommandsPipeline.java @@ -1,12 +1,11 @@ package redis.clients.jedis; - import java.util.List; import java.util.Set; - /** - * Multikey related commands (these are split out because they are non-shardable) + * Multikey related commands (these are split out because they are + * non-shardable) */ public interface MultiKeyCommandsPipeline { Response del(String... keys); @@ -39,7 +38,8 @@ public interface MultiKeyCommandsPipeline { Response smove(String srckey, String dstkey, String member); - Response sort(String key, SortingParams sortingParameters, String dstkey); + Response sort(String key, SortingParams sortingParameters, + String dstkey); Response sort(String key, String dstkey); diff --git a/src/main/java/redis/clients/jedis/MultiKeyPipelineBase.java b/src/main/java/redis/clients/jedis/MultiKeyPipelineBase.java index be9d89a..fa7ae6e 100644 --- a/src/main/java/redis/clients/jedis/MultiKeyPipelineBase.java +++ b/src/main/java/redis/clients/jedis/MultiKeyPipelineBase.java @@ -5,397 +5,445 @@ import java.util.Map; import java.util.Set; abstract class MultiKeyPipelineBase extends PipelineBase implements - BasicRedisPipeline, - MultiKeyBinaryRedisPipeline, - MultiKeyCommandsPipeline { + BasicRedisPipeline, MultiKeyBinaryRedisPipeline, + MultiKeyCommandsPipeline, ClusterPipeline { protected Client client = null; public Response> brpop(String... args) { - client.brpop(args); - return getResponse(BuilderFactory.STRING_LIST); + client.brpop(args); + return getResponse(BuilderFactory.STRING_LIST); } - + public Response> brpop(int timeout, String... keys) { - client.brpop(timeout, keys); - return getResponse(BuilderFactory.STRING_LIST); + client.brpop(timeout, keys); + return getResponse(BuilderFactory.STRING_LIST); } public Response> blpop(String... args) { - client.blpop(args); - return getResponse(BuilderFactory.STRING_LIST); + client.blpop(args); + return getResponse(BuilderFactory.STRING_LIST); } - + public Response> blpop(int timeout, String... keys) { - client.blpop(timeout, keys); - return getResponse(BuilderFactory.STRING_LIST); + client.blpop(timeout, keys); + return getResponse(BuilderFactory.STRING_LIST); } - + public Response> blpopMap(int timeout, String... keys) { - client.blpop(timeout, keys); - return getResponse(BuilderFactory.STRING_MAP); + client.blpop(timeout, keys); + return getResponse(BuilderFactory.STRING_MAP); } public Response> brpop(byte[]... args) { - client.brpop(args); - return getResponse(BuilderFactory.BYTE_ARRAY_LIST); + client.brpop(args); + return getResponse(BuilderFactory.BYTE_ARRAY_LIST); } - + public Response> brpop(int timeout, byte[]... keys) { - client.brpop(timeout, keys); - return getResponse(BuilderFactory.STRING_LIST); + client.brpop(timeout, keys); + return getResponse(BuilderFactory.STRING_LIST); } - + public Response> brpopMap(int timeout, String... keys) { - client.blpop(timeout, keys); - return getResponse(BuilderFactory.STRING_MAP); + client.blpop(timeout, keys); + return getResponse(BuilderFactory.STRING_MAP); } public Response> blpop(byte[]... args) { - client.blpop(args); - return getResponse(BuilderFactory.BYTE_ARRAY_LIST); + client.blpop(args); + return getResponse(BuilderFactory.BYTE_ARRAY_LIST); } - + public Response> blpop(int timeout, byte[]... keys) { - client.blpop(timeout, keys); - return getResponse(BuilderFactory.STRING_LIST); + client.blpop(timeout, keys); + return getResponse(BuilderFactory.STRING_LIST); } public Response del(String... keys) { - client.del(keys); - return getResponse(BuilderFactory.LONG); + client.del(keys); + return getResponse(BuilderFactory.LONG); } public Response del(byte[]... keys) { - client.del(keys); - return getResponse(BuilderFactory.LONG); + client.del(keys); + return getResponse(BuilderFactory.LONG); } public Response> keys(String pattern) { - getClient(pattern).keys(pattern); - return getResponse(BuilderFactory.STRING_SET); + getClient(pattern).keys(pattern); + return getResponse(BuilderFactory.STRING_SET); } public Response> keys(byte[] pattern) { - getClient(pattern).keys(pattern); - return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); + getClient(pattern).keys(pattern); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); } public Response> mget(String... keys) { - client.mget(keys); - return getResponse(BuilderFactory.STRING_LIST); + client.mget(keys); + return getResponse(BuilderFactory.STRING_LIST); } public Response> mget(byte[]... keys) { - client.mget(keys); - return getResponse(BuilderFactory.BYTE_ARRAY_LIST); + client.mget(keys); + return getResponse(BuilderFactory.BYTE_ARRAY_LIST); } public Response mset(String... keysvalues) { - client.mset(keysvalues); - return getResponse(BuilderFactory.STRING); + client.mset(keysvalues); + return getResponse(BuilderFactory.STRING); } public Response mset(byte[]... keysvalues) { - client.mset(keysvalues); - return getResponse(BuilderFactory.STRING); + client.mset(keysvalues); + return getResponse(BuilderFactory.STRING); } public Response msetnx(String... keysvalues) { - client.msetnx(keysvalues); - return getResponse(BuilderFactory.LONG); + client.msetnx(keysvalues); + return getResponse(BuilderFactory.LONG); } public Response msetnx(byte[]... keysvalues) { - client.msetnx(keysvalues); - return getResponse(BuilderFactory.LONG); + client.msetnx(keysvalues); + return getResponse(BuilderFactory.LONG); } public Response rename(String oldkey, String newkey) { - client.rename(oldkey, newkey); - return getResponse(BuilderFactory.STRING); + client.rename(oldkey, newkey); + return getResponse(BuilderFactory.STRING); } public Response rename(byte[] oldkey, byte[] newkey) { - client.rename(oldkey, newkey); - return getResponse(BuilderFactory.STRING); + client.rename(oldkey, newkey); + return getResponse(BuilderFactory.STRING); } public Response renamenx(String oldkey, String newkey) { - client.renamenx(oldkey, newkey); - return getResponse(BuilderFactory.LONG); + client.renamenx(oldkey, newkey); + return getResponse(BuilderFactory.LONG); } public Response renamenx(byte[] oldkey, byte[] newkey) { - client.renamenx(oldkey, newkey); - return getResponse(BuilderFactory.LONG); + client.renamenx(oldkey, newkey); + return getResponse(BuilderFactory.LONG); } public Response rpoplpush(String srckey, String dstkey) { - client.rpoplpush(srckey, dstkey); - return getResponse(BuilderFactory.STRING); + client.rpoplpush(srckey, dstkey); + return getResponse(BuilderFactory.STRING); } public Response rpoplpush(byte[] srckey, byte[] dstkey) { - client.rpoplpush(srckey, dstkey); - return getResponse(BuilderFactory.BYTE_ARRAY); + client.rpoplpush(srckey, dstkey); + return getResponse(BuilderFactory.BYTE_ARRAY); } public Response> sdiff(String... keys) { - client.sdiff(keys); - return getResponse(BuilderFactory.STRING_SET); + client.sdiff(keys); + return getResponse(BuilderFactory.STRING_SET); } public Response> sdiff(byte[]... keys) { - client.sdiff(keys); - return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); + client.sdiff(keys); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); } public Response sdiffstore(String dstkey, String... keys) { - client.sdiffstore(dstkey, keys); - return getResponse(BuilderFactory.LONG); + client.sdiffstore(dstkey, keys); + return getResponse(BuilderFactory.LONG); } public Response sdiffstore(byte[] dstkey, byte[]... keys) { - client.sdiffstore(dstkey, keys); - return getResponse(BuilderFactory.LONG); + client.sdiffstore(dstkey, keys); + return getResponse(BuilderFactory.LONG); } public Response> sinter(String... keys) { - client.sinter(keys); - return getResponse(BuilderFactory.STRING_SET); + client.sinter(keys); + return getResponse(BuilderFactory.STRING_SET); } public Response> sinter(byte[]... keys) { - client.sinter(keys); - return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); + client.sinter(keys); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); } public Response sinterstore(String dstkey, String... keys) { - client.sinterstore(dstkey, keys); - return getResponse(BuilderFactory.LONG); + client.sinterstore(dstkey, keys); + return getResponse(BuilderFactory.LONG); } public Response sinterstore(byte[] dstkey, byte[]... keys) { - client.sinterstore(dstkey, keys); - return getResponse(BuilderFactory.LONG); + client.sinterstore(dstkey, keys); + return getResponse(BuilderFactory.LONG); } public Response smove(String srckey, String dstkey, String member) { - client.smove(srckey, dstkey, member); - return getResponse(BuilderFactory.LONG); + client.smove(srckey, dstkey, member); + return getResponse(BuilderFactory.LONG); } public Response smove(byte[] srckey, byte[] dstkey, byte[] member) { - client.smove(srckey, dstkey, member); - return getResponse(BuilderFactory.LONG); + client.smove(srckey, dstkey, member); + return getResponse(BuilderFactory.LONG); } - public Response sort(String key, - SortingParams sortingParameters, String dstkey) { - client.sort(key, sortingParameters, dstkey); - return getResponse(BuilderFactory.LONG); + public Response sort(String key, SortingParams sortingParameters, + String dstkey) { + client.sort(key, sortingParameters, dstkey); + return getResponse(BuilderFactory.LONG); } - public Response sort(byte[] key, - SortingParams sortingParameters, byte[] dstkey) { - client.sort(key, sortingParameters, dstkey); - return getResponse(BuilderFactory.LONG); + public Response sort(byte[] key, SortingParams sortingParameters, + byte[] dstkey) { + client.sort(key, sortingParameters, dstkey); + return getResponse(BuilderFactory.LONG); } public Response sort(String key, String dstkey) { - client.sort(key, dstkey); - return getResponse(BuilderFactory.LONG); + client.sort(key, dstkey); + return getResponse(BuilderFactory.LONG); } public Response sort(byte[] key, byte[] dstkey) { - client.sort(key, dstkey); - return getResponse(BuilderFactory.LONG); + client.sort(key, dstkey); + return getResponse(BuilderFactory.LONG); } public Response> sunion(String... keys) { - client.sunion(keys); - return getResponse(BuilderFactory.STRING_SET); + client.sunion(keys); + return getResponse(BuilderFactory.STRING_SET); } public Response> sunion(byte[]... keys) { - client.sunion(keys); - return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); + client.sunion(keys); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); } public Response sunionstore(String dstkey, String... keys) { - client.sunionstore(dstkey, keys); - return getResponse(BuilderFactory.LONG); + client.sunionstore(dstkey, keys); + return getResponse(BuilderFactory.LONG); } public Response sunionstore(byte[] dstkey, byte[]... keys) { - client.sunionstore(dstkey, keys); - return getResponse(BuilderFactory.LONG); + client.sunionstore(dstkey, keys); + return getResponse(BuilderFactory.LONG); } public Response watch(String... keys) { - client.watch(keys); - return getResponse(BuilderFactory.STRING); + client.watch(keys); + return getResponse(BuilderFactory.STRING); } public Response watch(byte[]... keys) { - client.watch(keys); - return getResponse(BuilderFactory.STRING); + client.watch(keys); + return getResponse(BuilderFactory.STRING); } public Response zinterstore(String dstkey, String... sets) { - client.zinterstore(dstkey, sets); - return getResponse(BuilderFactory.LONG); + client.zinterstore(dstkey, sets); + return getResponse(BuilderFactory.LONG); } public Response zinterstore(byte[] dstkey, byte[]... sets) { - client.zinterstore(dstkey, sets); - return getResponse(BuilderFactory.LONG); + client.zinterstore(dstkey, sets); + return getResponse(BuilderFactory.LONG); } public Response zinterstore(String dstkey, ZParams params, - String... sets) { - client.zinterstore(dstkey, params, sets); - return getResponse(BuilderFactory.LONG); + String... sets) { + client.zinterstore(dstkey, params, sets); + return getResponse(BuilderFactory.LONG); } public Response zinterstore(byte[] dstkey, ZParams params, - byte[]... sets) { - client.zinterstore(dstkey, params, sets); - return getResponse(BuilderFactory.LONG); + byte[]... sets) { + client.zinterstore(dstkey, params, sets); + return getResponse(BuilderFactory.LONG); } public Response zunionstore(String dstkey, String... sets) { - client.zunionstore(dstkey, sets); - return getResponse(BuilderFactory.LONG); + client.zunionstore(dstkey, sets); + return getResponse(BuilderFactory.LONG); } public Response zunionstore(byte[] dstkey, byte[]... sets) { - client.zunionstore(dstkey, sets); - return getResponse(BuilderFactory.LONG); + client.zunionstore(dstkey, sets); + return getResponse(BuilderFactory.LONG); } public Response zunionstore(String dstkey, ZParams params, - String... sets) { - client.zunionstore(dstkey, params, sets); - return getResponse(BuilderFactory.LONG); + String... sets) { + client.zunionstore(dstkey, params, sets); + return getResponse(BuilderFactory.LONG); } public Response zunionstore(byte[] dstkey, ZParams params, - byte[]... sets) { - client.zunionstore(dstkey, params, sets); - return getResponse(BuilderFactory.LONG); + byte[]... sets) { + client.zunionstore(dstkey, params, sets); + return getResponse(BuilderFactory.LONG); } public Response bgrewriteaof() { - client.bgrewriteaof(); - return getResponse(BuilderFactory.STRING); + client.bgrewriteaof(); + return getResponse(BuilderFactory.STRING); } public Response bgsave() { - client.bgsave(); - return getResponse(BuilderFactory.STRING); + client.bgsave(); + return getResponse(BuilderFactory.STRING); } public Response configGet(String pattern) { - client.configGet(pattern); - return getResponse(BuilderFactory.STRING); + client.configGet(pattern); + return getResponse(BuilderFactory.STRING); } public Response configSet(String parameter, String value) { - client.configSet(parameter, value); - return getResponse(BuilderFactory.STRING); + client.configSet(parameter, value); + return getResponse(BuilderFactory.STRING); } public Response brpoplpush(String source, String destination, - int timeout) { - client.brpoplpush(source, destination, timeout); - return getResponse(BuilderFactory.STRING); + int timeout) { + client.brpoplpush(source, destination, timeout); + return getResponse(BuilderFactory.STRING); } public Response brpoplpush(byte[] source, byte[] destination, - int timeout) { - client.brpoplpush(source, destination, timeout); - return getResponse(BuilderFactory.BYTE_ARRAY); + int timeout) { + client.brpoplpush(source, destination, timeout); + return getResponse(BuilderFactory.BYTE_ARRAY); } public Response configResetStat() { - client.configResetStat(); - return getResponse(BuilderFactory.STRING); + client.configResetStat(); + return getResponse(BuilderFactory.STRING); } public Response save() { - client.save(); - return getResponse(BuilderFactory.STRING); + client.save(); + return getResponse(BuilderFactory.STRING); } public Response lastsave() { - client.lastsave(); - return getResponse(BuilderFactory.LONG); + client.lastsave(); + return getResponse(BuilderFactory.LONG); } public Response publish(String channel, String message) { - client.publish(channel, message); - return getResponse(BuilderFactory.LONG); + client.publish(channel, message); + return getResponse(BuilderFactory.LONG); } public Response publish(byte[] channel, byte[] message) { - client.publish(channel, message); - return getResponse(BuilderFactory.LONG); + client.publish(channel, message); + return getResponse(BuilderFactory.LONG); } public Response randomKey() { - client.randomKey(); - return getResponse(BuilderFactory.STRING); + client.randomKey(); + return getResponse(BuilderFactory.STRING); } public Response randomKeyBinary() { - client.randomKey(); - return getResponse(BuilderFactory.BYTE_ARRAY); + client.randomKey(); + return getResponse(BuilderFactory.BYTE_ARRAY); } public Response flushDB() { - client.flushDB(); - return getResponse(BuilderFactory.STRING); + client.flushDB(); + return getResponse(BuilderFactory.STRING); } public Response flushAll() { - client.flushAll(); - return getResponse(BuilderFactory.STRING); + client.flushAll(); + return getResponse(BuilderFactory.STRING); } public Response info() { - client.info(); - return getResponse(BuilderFactory.STRING); + client.info(); + return getResponse(BuilderFactory.STRING); } public Response dbSize() { - client.dbSize(); - return getResponse(BuilderFactory.LONG); + client.dbSize(); + return getResponse(BuilderFactory.LONG); } public Response shutdown() { - client.shutdown(); - return getResponse(BuilderFactory.STRING); + client.shutdown(); + return getResponse(BuilderFactory.STRING); } public Response ping() { - client.ping(); - return getResponse(BuilderFactory.STRING); + client.ping(); + return getResponse(BuilderFactory.STRING); } public Response select(int index) { - client.select(index); - return getResponse(BuilderFactory.STRING); + client.select(index); + return getResponse(BuilderFactory.STRING); } public Response bitop(BitOP op, byte[] destKey, byte[]... srcKeys) { - client.bitop(op, destKey, srcKeys); - return getResponse(BuilderFactory.LONG); + client.bitop(op, destKey, srcKeys); + return getResponse(BuilderFactory.LONG); } public Response bitop(BitOP op, String destKey, String... srcKeys) { - client.bitop(op, destKey, srcKeys); - return getResponse(BuilderFactory.LONG); + client.bitop(op, destKey, srcKeys); + return getResponse(BuilderFactory.LONG); + } + + public Response clusterNodes() { + client.clusterNodes(); + return getResponse(BuilderFactory.STRING); + } + + public Response clusterMeet(final String ip, final int port) { + client.clusterMeet(ip, port); + return getResponse(BuilderFactory.STRING); + } + + public Response clusterAddSlots(final int... slots) { + client.clusterAddSlots(slots); + return getResponse(BuilderFactory.STRING); + } + + public Response clusterDelSlots(final int... slots) { + client.clusterDelSlots(slots); + return getResponse(BuilderFactory.STRING); + } + + public Response clusterInfo() { + client.clusterInfo(); + return getResponse(BuilderFactory.STRING); + } + + public Response> clusterGetKeysInSlot(final int slot, + final int count) { + client.clusterGetKeysInSlot(slot, count); + return getResponse(BuilderFactory.STRING_LIST); + } + + public Response clusterSetSlotNode(final int slot, + final String nodeId) { + client.clusterSetSlotNode(slot, nodeId); + return getResponse(BuilderFactory.STRING); + } + + public Response clusterSetSlotMigrating(final int slot, + final String nodeId) { + client.clusterSetSlotMigrating(slot, nodeId); + return getResponse(BuilderFactory.STRING); + } + + public Response clusterSetSlotImporting(final int slot, + final String nodeId) { + client.clusterSetSlotImporting(slot, nodeId); + return getResponse(BuilderFactory.STRING); } } diff --git a/src/main/java/redis/clients/jedis/Pipeline.java b/src/main/java/redis/clients/jedis/Pipeline.java index 98cab69..97f856b 100755 --- a/src/main/java/redis/clients/jedis/Pipeline.java +++ b/src/main/java/redis/clients/jedis/Pipeline.java @@ -1,66 +1,66 @@ package redis.clients.jedis; -import redis.clients.jedis.exceptions.JedisDataException; - import java.util.ArrayList; import java.util.List; -public class Pipeline extends MultiKeyPipelineBase { - - private MultiResponseBuilder currentMulti; - - private class MultiResponseBuilder extends Builder>{ - private List> responses = new ArrayList>(); - - @Override - public List build(Object data) { - @SuppressWarnings("unchecked") - List list = (List)data; - List values = new ArrayList(); - - if(list.size() != responses.size()){ - throw new JedisDataException("Expected data size " + responses.size() + " but was " + list.size()); - } - - for(int i=0;i response = responses.get(i); - response.set(list.get(i)); - values.add(response.get()); - } - return values; - } +import redis.clients.jedis.exceptions.JedisDataException; - public void addResponse(Response response){ - responses.add(response); - } +public class Pipeline extends MultiKeyPipelineBase { + + private MultiResponseBuilder currentMulti; + + private class MultiResponseBuilder extends Builder> { + private List> responses = new ArrayList>(); + + @Override + public List build(Object data) { + @SuppressWarnings("unchecked") + List list = (List) data; + List values = new ArrayList(); + + if (list.size() != responses.size()) { + throw new JedisDataException("Expected data size " + + responses.size() + " but was " + list.size()); + } + + for (int i = 0; i < list.size(); i++) { + Response response = responses.get(i); + response.set(list.get(i)); + values.add(response.get()); + } + return values; + } + + public void addResponse(Response response) { + responses.add(response); + } } @Override protected Response getResponse(Builder builder) { - if(currentMulti != null){ - super.getResponse(BuilderFactory.STRING); //Expected QUEUED - - Response lr = new Response(builder); - currentMulti.addResponse(lr); - return lr; - } - else{ - return super.getResponse(builder); - } + if (currentMulti != null) { + super.getResponse(BuilderFactory.STRING); // Expected QUEUED + + Response lr = new Response(builder); + currentMulti.addResponse(lr); + return lr; + } else { + return super.getResponse(builder); + } } public void setClient(Client client) { - this.client = client; + this.client = client; } @Override protected Client getClient(byte[] key) { - return client; + return client; } @Override protected Client getClient(String key) { - return client; + return client; } /** @@ -69,10 +69,10 @@ public class Pipeline extends MultiKeyPipelineBase { * the different Response of the commands you execute. */ public void sync() { - List unformatted = client.getAll(); - for (Object o : unformatted) { - generateResponse(o); - } + List unformatted = client.getAll(); + for (Object o : unformatted) { + generateResponse(o); + } } /** @@ -84,37 +84,38 @@ public class Pipeline extends MultiKeyPipelineBase { * @return A list of all the responses in the order you executed them. */ public List syncAndReturnAll() { - List unformatted = client.getAll(); - List formatted = new ArrayList(); - - for (Object o : unformatted) { - try { - formatted.add(generateResponse(o).get()); - } catch (JedisDataException e) { - formatted.add(e); - } - } - return formatted; + List unformatted = client.getAll(); + List formatted = new ArrayList(); + + for (Object o : unformatted) { + try { + formatted.add(generateResponse(o).get()); + } catch (JedisDataException e) { + formatted.add(e); + } + } + return formatted; } public Response discard() { - client.discard(); - currentMulti = null; - return getResponse(BuilderFactory.STRING); + client.discard(); + currentMulti = null; + return getResponse(BuilderFactory.STRING); } public Response> exec() { - client.exec(); - Response> response = super.getResponse(currentMulti); - currentMulti = null; - return response; + client.exec(); + Response> response = super.getResponse(currentMulti); + currentMulti = null; + return response; } public Response multi() { - client.multi(); - Response response = getResponse(BuilderFactory.STRING); //Expecting OK - currentMulti = new MultiResponseBuilder(); - return response; + client.multi(); + Response response = getResponse(BuilderFactory.STRING); // Expecting + // OK + currentMulti = new MultiResponseBuilder(); + return response; } } diff --git a/src/main/java/redis/clients/jedis/PipelineBase.java b/src/main/java/redis/clients/jedis/PipelineBase.java index b89ea07..3183ba1 100644 --- a/src/main/java/redis/clients/jedis/PipelineBase.java +++ b/src/main/java/redis/clients/jedis/PipelineBase.java @@ -1,1191 +1,1207 @@ package redis.clients.jedis; -import redis.clients.jedis.BinaryClient.LIST_POSITION; +import static redis.clients.jedis.Protocol.toByteArray; import java.util.List; import java.util.Map; import java.util.Set; -import static redis.clients.jedis.Protocol.toByteArray; +import redis.clients.jedis.BinaryClient.LIST_POSITION; + +abstract class PipelineBase extends Queable implements BinaryRedisPipeline, + RedisPipeline { -abstract class PipelineBase extends Queable implements - BinaryRedisPipeline, - RedisPipeline { - protected abstract Client getClient(String key); - + protected abstract Client getClient(byte[] key); public Response append(String key, String value) { - getClient(key).append(key, value); - return getResponse(BuilderFactory.LONG); + getClient(key).append(key, value); + return getResponse(BuilderFactory.LONG); } public Response append(byte[] key, byte[] value) { - getClient(key).append(key, value); - return getResponse(BuilderFactory.LONG); + getClient(key).append(key, value); + return getResponse(BuilderFactory.LONG); } public Response> blpop(String key) { - String[] temp = new String[1]; - temp[0] = key; - getClient(key).blpop(temp); - return getResponse(BuilderFactory.STRING_LIST); + String[] temp = new String[1]; + temp[0] = key; + getClient(key).blpop(temp); + return getResponse(BuilderFactory.STRING_LIST); } public Response> brpop(String key) { - String[] temp = new String[1]; - temp[0] = key; - getClient(key).brpop(temp); - return getResponse(BuilderFactory.STRING_LIST); + String[] temp = new String[1]; + temp[0] = key; + getClient(key).brpop(temp); + return getResponse(BuilderFactory.STRING_LIST); } public Response> blpop(byte[] key) { - byte[][] temp = new byte[1][]; - temp[0] = key; - getClient(key).blpop(temp); - return getResponse(BuilderFactory.BYTE_ARRAY_LIST); + byte[][] temp = new byte[1][]; + temp[0] = key; + getClient(key).blpop(temp); + return getResponse(BuilderFactory.BYTE_ARRAY_LIST); } public Response> brpop(byte[] key) { - byte[][] temp = new byte[1][]; - temp[0] = key; - getClient(key).brpop(temp); - return getResponse(BuilderFactory.BYTE_ARRAY_LIST); + byte[][] temp = new byte[1][]; + temp[0] = key; + getClient(key).brpop(temp); + return getResponse(BuilderFactory.BYTE_ARRAY_LIST); } public Response decr(String key) { - getClient(key).decr(key); - return getResponse(BuilderFactory.LONG); + getClient(key).decr(key); + return getResponse(BuilderFactory.LONG); } public Response decr(byte[] key) { - getClient(key).decr(key); - return getResponse(BuilderFactory.LONG); + getClient(key).decr(key); + return getResponse(BuilderFactory.LONG); } public Response decrBy(String key, long integer) { - getClient(key).decrBy(key, integer); - return getResponse(BuilderFactory.LONG); + getClient(key).decrBy(key, integer); + return getResponse(BuilderFactory.LONG); } public Response decrBy(byte[] key, long integer) { - getClient(key).decrBy(key, integer); - return getResponse(BuilderFactory.LONG); + getClient(key).decrBy(key, integer); + return getResponse(BuilderFactory.LONG); } public Response del(String key) { - getClient(key).del(key); - return getResponse(BuilderFactory.LONG); + getClient(key).del(key); + return getResponse(BuilderFactory.LONG); } public Response del(byte[] key) { - getClient(key).del(key); - return getResponse(BuilderFactory.LONG); + getClient(key).del(key); + return getResponse(BuilderFactory.LONG); } public Response echo(String string) { - getClient(string).echo(string); - return getResponse(BuilderFactory.STRING); + getClient(string).echo(string); + return getResponse(BuilderFactory.STRING); } public Response echo(byte[] string) { - getClient(string).echo(string); - return getResponse(BuilderFactory.BYTE_ARRAY); + getClient(string).echo(string); + return getResponse(BuilderFactory.BYTE_ARRAY); } public Response exists(String key) { - getClient(key).exists(key); - return getResponse(BuilderFactory.BOOLEAN); + getClient(key).exists(key); + return getResponse(BuilderFactory.BOOLEAN); } public Response exists(byte[] key) { - getClient(key).exists(key); - return getResponse(BuilderFactory.BOOLEAN); + getClient(key).exists(key); + return getResponse(BuilderFactory.BOOLEAN); } public Response expire(String key, int seconds) { - getClient(key).expire(key, seconds); - return getResponse(BuilderFactory.LONG); + getClient(key).expire(key, seconds); + return getResponse(BuilderFactory.LONG); } public Response expire(byte[] key, int seconds) { - getClient(key).expire(key, seconds); - return getResponse(BuilderFactory.LONG); + getClient(key).expire(key, seconds); + return getResponse(BuilderFactory.LONG); } public Response expireAt(String key, long unixTime) { - getClient(key).expireAt(key, unixTime); - return getResponse(BuilderFactory.LONG); + getClient(key).expireAt(key, unixTime); + return getResponse(BuilderFactory.LONG); } public Response expireAt(byte[] key, long unixTime) { - getClient(key).expireAt(key, unixTime); - return getResponse(BuilderFactory.LONG); + getClient(key).expireAt(key, unixTime); + return getResponse(BuilderFactory.LONG); } public Response get(String key) { - getClient(key).get(key); - return getResponse(BuilderFactory.STRING); + getClient(key).get(key); + return getResponse(BuilderFactory.STRING); } public Response get(byte[] key) { - getClient(key).get(key); - return getResponse(BuilderFactory.BYTE_ARRAY); + getClient(key).get(key); + return getResponse(BuilderFactory.BYTE_ARRAY); } public Response getbit(String key, long offset) { - getClient(key).getbit(key, offset); - return getResponse(BuilderFactory.BOOLEAN); + getClient(key).getbit(key, offset); + return getResponse(BuilderFactory.BOOLEAN); } public Response getbit(byte[] key, long offset) { - getClient(key).getbit(key, offset); - return getResponse(BuilderFactory.BOOLEAN); + getClient(key).getbit(key, offset); + return getResponse(BuilderFactory.BOOLEAN); } public Response getrange(String key, long startOffset, - long endOffset) { - getClient(key).getrange(key, startOffset, endOffset); - return getResponse(BuilderFactory.STRING); + long endOffset) { + getClient(key).getrange(key, startOffset, endOffset); + return getResponse(BuilderFactory.STRING); } public Response getSet(String key, String value) { - getClient(key).getSet(key, value); - return getResponse(BuilderFactory.STRING); + getClient(key).getSet(key, value); + return getResponse(BuilderFactory.STRING); } public Response getSet(byte[] key, byte[] value) { - getClient(key).getSet(key, value); - return getResponse(BuilderFactory.BYTE_ARRAY); + getClient(key).getSet(key, value); + return getResponse(BuilderFactory.BYTE_ARRAY); } public Response getrange(byte[] key, long startOffset, long endOffset) { - getClient(key).getrange(key, startOffset, endOffset); - return getResponse(BuilderFactory.LONG); + getClient(key).getrange(key, startOffset, endOffset); + return getResponse(BuilderFactory.LONG); } public Response hdel(String key, String... field) { - getClient(key).hdel(key, field); - return getResponse(BuilderFactory.LONG); + getClient(key).hdel(key, field); + return getResponse(BuilderFactory.LONG); } public Response hdel(byte[] key, byte[]... field) { - getClient(key).hdel(key, field); - return getResponse(BuilderFactory.LONG); + getClient(key).hdel(key, field); + return getResponse(BuilderFactory.LONG); } public Response hexists(String key, String field) { - getClient(key).hexists(key, field); - return getResponse(BuilderFactory.BOOLEAN); + getClient(key).hexists(key, field); + return getResponse(BuilderFactory.BOOLEAN); } public Response hexists(byte[] key, byte[] field) { - getClient(key).hexists(key, field); - return getResponse(BuilderFactory.BOOLEAN); + getClient(key).hexists(key, field); + return getResponse(BuilderFactory.BOOLEAN); } public Response hget(String key, String field) { - getClient(key).hget(key, field); - return getResponse(BuilderFactory.STRING); + getClient(key).hget(key, field); + return getResponse(BuilderFactory.STRING); } public Response hget(byte[] key, byte[] field) { - getClient(key).hget(key, field); - return getResponse(BuilderFactory.BYTE_ARRAY); + getClient(key).hget(key, field); + return getResponse(BuilderFactory.BYTE_ARRAY); } public Response> hgetAll(String key) { - getClient(key).hgetAll(key); - return getResponse(BuilderFactory.STRING_MAP); + getClient(key).hgetAll(key); + return getResponse(BuilderFactory.STRING_MAP); } public Response> hgetAll(byte[] key) { - getClient(key).hgetAll(key); - return getResponse(BuilderFactory.BYTE_ARRAY_MAP); + getClient(key).hgetAll(key); + return getResponse(BuilderFactory.BYTE_ARRAY_MAP); } public Response hincrBy(String key, String field, long value) { - getClient(key).hincrBy(key, field, value); - return getResponse(BuilderFactory.LONG); + getClient(key).hincrBy(key, field, value); + return getResponse(BuilderFactory.LONG); } public Response hincrBy(byte[] key, byte[] field, long value) { - getClient(key).hincrBy(key, field, value); - return getResponse(BuilderFactory.LONG); + getClient(key).hincrBy(key, field, value); + return getResponse(BuilderFactory.LONG); } public Response> hkeys(String key) { - getClient(key).hkeys(key); - return getResponse(BuilderFactory.STRING_SET); + getClient(key).hkeys(key); + return getResponse(BuilderFactory.STRING_SET); } public Response> hkeys(byte[] key) { - getClient(key).hkeys(key); - return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); + getClient(key).hkeys(key); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); } public Response hlen(String key) { - getClient(key).hlen(key); - return getResponse(BuilderFactory.LONG); + getClient(key).hlen(key); + return getResponse(BuilderFactory.LONG); } public Response hlen(byte[] key) { - getClient(key).hlen(key); - return getResponse(BuilderFactory.LONG); + getClient(key).hlen(key); + return getResponse(BuilderFactory.LONG); } public Response> hmget(String key, String... fields) { - getClient(key).hmget(key, fields); - return getResponse(BuilderFactory.STRING_LIST); + getClient(key).hmget(key, fields); + return getResponse(BuilderFactory.STRING_LIST); } public Response> hmget(byte[] key, byte[]... fields) { - getClient(key).hmget(key, fields); - return getResponse(BuilderFactory.BYTE_ARRAY_LIST); + getClient(key).hmget(key, fields); + return getResponse(BuilderFactory.BYTE_ARRAY_LIST); } public Response hmset(String key, Map hash) { - getClient(key).hmset(key, hash); - return getResponse(BuilderFactory.STRING); + getClient(key).hmset(key, hash); + return getResponse(BuilderFactory.STRING); } public Response hmset(byte[] key, Map hash) { - getClient(key).hmset(key, hash); - return getResponse(BuilderFactory.STRING); + getClient(key).hmset(key, hash); + return getResponse(BuilderFactory.STRING); } public Response hset(String key, String field, String value) { - getClient(key).hset(key, field, value); - return getResponse(BuilderFactory.LONG); + getClient(key).hset(key, field, value); + return getResponse(BuilderFactory.LONG); } public Response hset(byte[] key, byte[] field, byte[] value) { - getClient(key).hset(key, field, value); - return getResponse(BuilderFactory.LONG); + getClient(key).hset(key, field, value); + return getResponse(BuilderFactory.LONG); } public Response hsetnx(String key, String field, String value) { - getClient(key).hsetnx(key, field, value); - return getResponse(BuilderFactory.LONG); + getClient(key).hsetnx(key, field, value); + return getResponse(BuilderFactory.LONG); } public Response hsetnx(byte[] key, byte[] field, byte[] value) { - getClient(key).hsetnx(key, field, value); - return getResponse(BuilderFactory.LONG); + getClient(key).hsetnx(key, field, value); + return getResponse(BuilderFactory.LONG); } public Response> hvals(String key) { - getClient(key).hvals(key); - return getResponse(BuilderFactory.STRING_LIST); + getClient(key).hvals(key); + return getResponse(BuilderFactory.STRING_LIST); } public Response> hvals(byte[] key) { - getClient(key).hvals(key); - return getResponse(BuilderFactory.BYTE_ARRAY_LIST); + getClient(key).hvals(key); + return getResponse(BuilderFactory.BYTE_ARRAY_LIST); } public Response incr(String key) { - getClient(key).incr(key); - return getResponse(BuilderFactory.LONG); + getClient(key).incr(key); + return getResponse(BuilderFactory.LONG); } public Response incr(byte[] key) { - getClient(key).incr(key); - return getResponse(BuilderFactory.LONG); + getClient(key).incr(key); + return getResponse(BuilderFactory.LONG); } public Response incrBy(String key, long integer) { - getClient(key).incrBy(key, integer); - return getResponse(BuilderFactory.LONG); + getClient(key).incrBy(key, integer); + return getResponse(BuilderFactory.LONG); } public Response incrBy(byte[] key, long integer) { - getClient(key).incrBy(key, integer); - return getResponse(BuilderFactory.LONG); + getClient(key).incrBy(key, integer); + return getResponse(BuilderFactory.LONG); } public Response lindex(String key, long index) { - getClient(key).lindex(key, index); - return getResponse(BuilderFactory.STRING); + getClient(key).lindex(key, index); + return getResponse(BuilderFactory.STRING); } public Response lindex(byte[] key, long index) { - getClient(key).lindex(key, index); - return getResponse(BuilderFactory.BYTE_ARRAY); + getClient(key).lindex(key, index); + return getResponse(BuilderFactory.BYTE_ARRAY); } public Response linsert(String key, LIST_POSITION where, - String pivot, String value) { - getClient(key).linsert(key, where, pivot, value); - return getResponse(BuilderFactory.LONG); + String pivot, String value) { + getClient(key).linsert(key, where, pivot, value); + return getResponse(BuilderFactory.LONG); } public Response linsert(byte[] key, LIST_POSITION where, - byte[] pivot, byte[] value) { - getClient(key).linsert(key, where, pivot, value); - return getResponse(BuilderFactory.LONG); + byte[] pivot, byte[] value) { + getClient(key).linsert(key, where, pivot, value); + return getResponse(BuilderFactory.LONG); } public Response llen(String key) { - getClient(key).llen(key); - return getResponse(BuilderFactory.LONG); + getClient(key).llen(key); + return getResponse(BuilderFactory.LONG); } public Response llen(byte[] key) { - getClient(key).llen(key); - return getResponse(BuilderFactory.LONG); + getClient(key).llen(key); + return getResponse(BuilderFactory.LONG); } public Response lpop(String key) { - getClient(key).lpop(key); - return getResponse(BuilderFactory.STRING); + getClient(key).lpop(key); + return getResponse(BuilderFactory.STRING); } public Response lpop(byte[] key) { - getClient(key).lpop(key); - return getResponse(BuilderFactory.BYTE_ARRAY); + getClient(key).lpop(key); + return getResponse(BuilderFactory.BYTE_ARRAY); } public Response lpush(String key, String... string) { - getClient(key).lpush(key, string); - return getResponse(BuilderFactory.LONG); + getClient(key).lpush(key, string); + return getResponse(BuilderFactory.LONG); } public Response lpush(byte[] key, byte[]... string) { - getClient(key).lpush(key, string); - return getResponse(BuilderFactory.LONG); + getClient(key).lpush(key, string); + return getResponse(BuilderFactory.LONG); } public Response lpushx(String key, String... string) { - getClient(key).lpushx(key, string); - return getResponse(BuilderFactory.LONG); + getClient(key).lpushx(key, string); + return getResponse(BuilderFactory.LONG); } public Response lpushx(byte[] key, byte[]... bytes) { - getClient(key).lpushx(key, bytes); - return getResponse(BuilderFactory.LONG); + getClient(key).lpushx(key, bytes); + return getResponse(BuilderFactory.LONG); } public Response> lrange(String key, long start, long end) { - getClient(key).lrange(key, start, end); - return getResponse(BuilderFactory.STRING_LIST); + getClient(key).lrange(key, start, end); + return getResponse(BuilderFactory.STRING_LIST); } public Response> lrange(byte[] key, long start, long end) { - getClient(key).lrange(key, start, end); - return getResponse(BuilderFactory.BYTE_ARRAY_LIST); + getClient(key).lrange(key, start, end); + return getResponse(BuilderFactory.BYTE_ARRAY_LIST); } public Response lrem(String key, long count, String value) { - getClient(key).lrem(key, count, value); - return getResponse(BuilderFactory.LONG); + getClient(key).lrem(key, count, value); + return getResponse(BuilderFactory.LONG); } public Response lrem(byte[] key, long count, byte[] value) { - getClient(key).lrem(key, count, value); - return getResponse(BuilderFactory.LONG); + getClient(key).lrem(key, count, value); + return getResponse(BuilderFactory.LONG); } public Response lset(String key, long index, String value) { - getClient(key).lset(key, index, value); - return getResponse(BuilderFactory.STRING); + getClient(key).lset(key, index, value); + return getResponse(BuilderFactory.STRING); } public Response lset(byte[] key, long index, byte[] value) { - getClient(key).lset(key, index, value); - return getResponse(BuilderFactory.STRING); + getClient(key).lset(key, index, value); + return getResponse(BuilderFactory.STRING); } public Response ltrim(String key, long start, long end) { - getClient(key).ltrim(key, start, end); - return getResponse(BuilderFactory.STRING); + getClient(key).ltrim(key, start, end); + return getResponse(BuilderFactory.STRING); } public Response ltrim(byte[] key, long start, long end) { - getClient(key).ltrim(key, start, end); - return getResponse(BuilderFactory.STRING); + getClient(key).ltrim(key, start, end); + return getResponse(BuilderFactory.STRING); } public Response move(String key, int dbIndex) { - getClient(key).move(key, dbIndex); - return getResponse(BuilderFactory.LONG); + getClient(key).move(key, dbIndex); + return getResponse(BuilderFactory.LONG); } public Response move(byte[] key, int dbIndex) { - getClient(key).move(key, dbIndex); - return getResponse(BuilderFactory.LONG); + getClient(key).move(key, dbIndex); + return getResponse(BuilderFactory.LONG); } public Response persist(String key) { - getClient(key).persist(key); - return getResponse(BuilderFactory.LONG); + getClient(key).persist(key); + return getResponse(BuilderFactory.LONG); } public Response persist(byte[] key) { - getClient(key).persist(key); - return getResponse(BuilderFactory.LONG); + getClient(key).persist(key); + return getResponse(BuilderFactory.LONG); } public Response rpop(String key) { - getClient(key).rpop(key); - return getResponse(BuilderFactory.STRING); + getClient(key).rpop(key); + return getResponse(BuilderFactory.STRING); } public Response rpop(byte[] key) { - getClient(key).rpop(key); - return getResponse(BuilderFactory.BYTE_ARRAY); + getClient(key).rpop(key); + return getResponse(BuilderFactory.BYTE_ARRAY); } public Response rpush(String key, String... string) { - getClient(key).rpush(key, string); - return getResponse(BuilderFactory.LONG); + getClient(key).rpush(key, string); + return getResponse(BuilderFactory.LONG); } public Response rpush(byte[] key, byte[]... string) { - getClient(key).rpush(key, string); - return getResponse(BuilderFactory.LONG); + getClient(key).rpush(key, string); + return getResponse(BuilderFactory.LONG); } public Response rpushx(String key, String... string) { - getClient(key).rpushx(key, string); - return getResponse(BuilderFactory.LONG); + getClient(key).rpushx(key, string); + return getResponse(BuilderFactory.LONG); } public Response rpushx(byte[] key, byte[]... string) { - getClient(key).rpushx(key, string); - return getResponse(BuilderFactory.LONG); + getClient(key).rpushx(key, string); + return getResponse(BuilderFactory.LONG); } public Response sadd(String key, String... member) { - getClient(key).sadd(key, member); - return getResponse(BuilderFactory.LONG); + getClient(key).sadd(key, member); + return getResponse(BuilderFactory.LONG); } public Response sadd(byte[] key, byte[]... member) { - getClient(key).sadd(key, member); - return getResponse(BuilderFactory.LONG); + getClient(key).sadd(key, member); + return getResponse(BuilderFactory.LONG); } public Response scard(String key) { - getClient(key).scard(key); - return getResponse(BuilderFactory.LONG); + getClient(key).scard(key); + return getResponse(BuilderFactory.LONG); } public Response scard(byte[] key) { - getClient(key).scard(key); - return getResponse(BuilderFactory.LONG); + getClient(key).scard(key); + return getResponse(BuilderFactory.LONG); } public Response set(String key, String value) { - getClient(key).set(key, value); - return getResponse(BuilderFactory.STRING); + getClient(key).set(key, value); + return getResponse(BuilderFactory.STRING); } public Response set(byte[] key, byte[] value) { - getClient(key).set(key, value); - return getResponse(BuilderFactory.STRING); + getClient(key).set(key, value); + return getResponse(BuilderFactory.STRING); } public Response setbit(String key, long offset, boolean value) { - getClient(key).setbit(key, offset, value); - return getResponse(BuilderFactory.BOOLEAN); + getClient(key).setbit(key, offset, value); + return getResponse(BuilderFactory.BOOLEAN); } public Response setbit(byte[] key, long offset, byte[] value) { - getClient(key).setbit(key, offset, value); - return getResponse(BuilderFactory.BOOLEAN); + getClient(key).setbit(key, offset, value); + return getResponse(BuilderFactory.BOOLEAN); } public Response setex(String key, int seconds, String value) { - getClient(key).setex(key, seconds, value); - return getResponse(BuilderFactory.STRING); + getClient(key).setex(key, seconds, value); + return getResponse(BuilderFactory.STRING); } public Response setex(byte[] key, int seconds, byte[] value) { - getClient(key).setex(key, seconds, value); - return getResponse(BuilderFactory.STRING); + getClient(key).setex(key, seconds, value); + return getResponse(BuilderFactory.STRING); } public Response setnx(String key, String value) { - getClient(key).setnx(key, value); - return getResponse(BuilderFactory.LONG); + getClient(key).setnx(key, value); + return getResponse(BuilderFactory.LONG); } public Response setnx(byte[] key, byte[] value) { - getClient(key).setnx(key, value); - return getResponse(BuilderFactory.LONG); + getClient(key).setnx(key, value); + return getResponse(BuilderFactory.LONG); } public Response setrange(String key, long offset, String value) { - getClient(key).setrange(key, offset, value); - return getResponse(BuilderFactory.LONG); + getClient(key).setrange(key, offset, value); + return getResponse(BuilderFactory.LONG); } public Response setrange(byte[] key, long offset, byte[] value) { - getClient(key).setrange(key, offset, value); - return getResponse(BuilderFactory.LONG); + getClient(key).setrange(key, offset, value); + return getResponse(BuilderFactory.LONG); } public Response sismember(String key, String member) { - getClient(key).sismember(key, member); - return getResponse(BuilderFactory.BOOLEAN); + getClient(key).sismember(key, member); + return getResponse(BuilderFactory.BOOLEAN); } public Response sismember(byte[] key, byte[] member) { - getClient(key).sismember(key, member); - return getResponse(BuilderFactory.BOOLEAN); + getClient(key).sismember(key, member); + return getResponse(BuilderFactory.BOOLEAN); } public Response> smembers(String key) { - getClient(key).smembers(key); - return getResponse(BuilderFactory.STRING_SET); + getClient(key).smembers(key); + return getResponse(BuilderFactory.STRING_SET); } public Response> smembers(byte[] key) { - getClient(key).smembers(key); - return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); + getClient(key).smembers(key); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); } public Response> sort(String key) { - getClient(key).sort(key); - return getResponse(BuilderFactory.STRING_LIST); + getClient(key).sort(key); + return getResponse(BuilderFactory.STRING_LIST); } public Response> sort(byte[] key) { - getClient(key).sort(key); - return getResponse(BuilderFactory.BYTE_ARRAY_LIST); + getClient(key).sort(key); + return getResponse(BuilderFactory.BYTE_ARRAY_LIST); } public Response> sort(String key, - SortingParams sortingParameters) { - getClient(key).sort(key, sortingParameters); - return getResponse(BuilderFactory.STRING_LIST); + SortingParams sortingParameters) { + getClient(key).sort(key, sortingParameters); + return getResponse(BuilderFactory.STRING_LIST); } public Response> sort(byte[] key, - SortingParams sortingParameters) { - getClient(key).sort(key, sortingParameters); - return getResponse(BuilderFactory.BYTE_ARRAY_LIST); + SortingParams sortingParameters) { + getClient(key).sort(key, sortingParameters); + return getResponse(BuilderFactory.BYTE_ARRAY_LIST); } public Response spop(String key) { - getClient(key).spop(key); - return getResponse(BuilderFactory.STRING); + getClient(key).spop(key); + return getResponse(BuilderFactory.STRING); } public Response spop(byte[] key) { - getClient(key).spop(key); - return getResponse(BuilderFactory.BYTE_ARRAY); + getClient(key).spop(key); + return getResponse(BuilderFactory.BYTE_ARRAY); } public Response srandmember(String key) { - getClient(key).srandmember(key); - return getResponse(BuilderFactory.STRING); + getClient(key).srandmember(key); + return getResponse(BuilderFactory.STRING); } - + public Response> srandmember(String key, int count) { - getClient(key).srandmember(key, count); - return getResponse(BuilderFactory.STRING_LIST); + getClient(key).srandmember(key, count); + return getResponse(BuilderFactory.STRING_LIST); } public Response srandmember(byte[] key) { - getClient(key).srandmember(key); - return getResponse(BuilderFactory.BYTE_ARRAY); + getClient(key).srandmember(key); + return getResponse(BuilderFactory.BYTE_ARRAY); } - + public Response> srandmember(byte[] key, int count) { - getClient(key).srandmember(key, count); - return getResponse(BuilderFactory.BYTE_ARRAY_LIST); + getClient(key).srandmember(key, count); + return getResponse(BuilderFactory.BYTE_ARRAY_LIST); } public Response srem(String key, String... member) { - getClient(key).srem(key, member); - return getResponse(BuilderFactory.LONG); + getClient(key).srem(key, member); + return getResponse(BuilderFactory.LONG); } public Response srem(byte[] key, byte[]... member) { - getClient(key).srem(key, member); - return getResponse(BuilderFactory.LONG); + getClient(key).srem(key, member); + return getResponse(BuilderFactory.LONG); } public Response strlen(String key) { - getClient(key).strlen(key); - return getResponse(BuilderFactory.LONG); + getClient(key).strlen(key); + return getResponse(BuilderFactory.LONG); } public Response strlen(byte[] key) { - getClient(key).strlen(key); - return getResponse(BuilderFactory.LONG); + getClient(key).strlen(key); + return getResponse(BuilderFactory.LONG); } public Response substr(String key, int start, int end) { - getClient(key).substr(key, start, end); - return getResponse(BuilderFactory.STRING); + getClient(key).substr(key, start, end); + return getResponse(BuilderFactory.STRING); } public Response substr(byte[] key, int start, int end) { - getClient(key).substr(key, start, end); - return getResponse(BuilderFactory.STRING); + getClient(key).substr(key, start, end); + return getResponse(BuilderFactory.STRING); } public Response ttl(String key) { - getClient(key).ttl(key); - return getResponse(BuilderFactory.LONG); + getClient(key).ttl(key); + return getResponse(BuilderFactory.LONG); } public Response ttl(byte[] key) { - getClient(key).ttl(key); - return getResponse(BuilderFactory.LONG); + getClient(key).ttl(key); + return getResponse(BuilderFactory.LONG); } public Response type(String key) { - getClient(key).type(key); - return getResponse(BuilderFactory.STRING); + getClient(key).type(key); + return getResponse(BuilderFactory.STRING); } public Response type(byte[] key) { - getClient(key).type(key); - return getResponse(BuilderFactory.STRING); + getClient(key).type(key); + return getResponse(BuilderFactory.STRING); } - - public Response zadd(String key, double score, String member) { - getClient(key).zadd(key, score, member); - return getResponse(BuilderFactory.LONG); - } - public Response zadd(String key, Map scoreMembers) { - getClient(key).zadd(key, scoreMembers); - return getResponse(BuilderFactory.LONG); + public Response zadd(String key, double score, String member) { + getClient(key).zadd(key, score, member); + return getResponse(BuilderFactory.LONG); + } + + public Response zadd(String key, Map scoreMembers) { + getClient(key).zadd(key, scoreMembers); + return getResponse(BuilderFactory.LONG); } public Response zadd(byte[] key, double score, byte[] member) { - getClient(key).zadd(key, score, member); - return getResponse(BuilderFactory.LONG); + getClient(key).zadd(key, score, member); + return getResponse(BuilderFactory.LONG); } public Response zcard(String key) { - getClient(key).zcard(key); - return getResponse(BuilderFactory.LONG); + getClient(key).zcard(key); + return getResponse(BuilderFactory.LONG); } public Response zcard(byte[] key) { - getClient(key).zcard(key); - return getResponse(BuilderFactory.LONG); + getClient(key).zcard(key); + return getResponse(BuilderFactory.LONG); } public Response zcount(String key, double min, double max) { - getClient(key).zcount(key, min, max); - return getResponse(BuilderFactory.LONG); + getClient(key).zcount(key, min, max); + return getResponse(BuilderFactory.LONG); } - + public Response zcount(String key, String min, String max) { - getClient(key).zcount(key, min, max); - return getResponse(BuilderFactory.LONG); + getClient(key).zcount(key, min, max); + return getResponse(BuilderFactory.LONG); } public Response zcount(byte[] key, double min, double max) { - getClient(key).zcount(key, toByteArray(min), toByteArray(max)); - return getResponse(BuilderFactory.LONG); + getClient(key).zcount(key, toByteArray(min), toByteArray(max)); + return getResponse(BuilderFactory.LONG); } public Response zincrby(String key, double score, String member) { - getClient(key).zincrby(key, score, member); - return getResponse(BuilderFactory.DOUBLE); + getClient(key).zincrby(key, score, member); + return getResponse(BuilderFactory.DOUBLE); } public Response zincrby(byte[] key, double score, byte[] member) { - getClient(key).zincrby(key, score, member); - return getResponse(BuilderFactory.DOUBLE); + getClient(key).zincrby(key, score, member); + return getResponse(BuilderFactory.DOUBLE); } public Response> zrange(String key, long start, long end) { - getClient(key).zrange(key, start, end); - return getResponse(BuilderFactory.STRING_ZSET); + getClient(key).zrange(key, start, end); + return getResponse(BuilderFactory.STRING_ZSET); } public Response> zrange(byte[] key, long start, long end) { - getClient(key).zrange(key, start, end); - return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); + getClient(key).zrange(key, start, end); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); } public Response> zrangeByScore(String key, double min, - double max) { - getClient(key).zrangeByScore(key, min, max); - return getResponse(BuilderFactory.STRING_ZSET); + double max) { + getClient(key).zrangeByScore(key, min, max); + return getResponse(BuilderFactory.STRING_ZSET); } public Response> zrangeByScore(byte[] key, double min, - double max) { - return zrangeByScore(key, toByteArray(min), toByteArray(max)); + double max) { + return zrangeByScore(key, toByteArray(min), toByteArray(max)); } public Response> zrangeByScore(String key, String min, - String max) { - getClient(key).zrangeByScore(key, min, max); - return getResponse(BuilderFactory.STRING_ZSET); + String max) { + getClient(key).zrangeByScore(key, min, max); + return getResponse(BuilderFactory.STRING_ZSET); } public Response> zrangeByScore(byte[] key, byte[] min, - byte[] max) { - getClient(key).zrangeByScore(key, min, max); - return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); + byte[] max) { + getClient(key).zrangeByScore(key, min, max); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); } public Response> zrangeByScore(String key, double min, - double max, int offset, int count) { - getClient(key).zrangeByScore(key, min, max, offset, count); - return getResponse(BuilderFactory.STRING_ZSET); + double max, int offset, int count) { + getClient(key).zrangeByScore(key, min, max, offset, count); + return getResponse(BuilderFactory.STRING_ZSET); + } + + public Response> zrangeByScore(String key, String min, + String max, int offset, int count) { + getClient(key).zrangeByScore(key, min, max, offset, count); + return getResponse(BuilderFactory.STRING_ZSET); } - - public Response> zrangeByScore(String key, String min, String max, int offset, int count) { - getClient(key).zrangeByScore(key, min, max, offset, count); - return getResponse(BuilderFactory.STRING_ZSET); - } public Response> zrangeByScore(byte[] key, double min, - double max, int offset, int count) { - return zrangeByScore(key, toByteArray(min), toByteArray(max), offset, count); + double max, int offset, int count) { + return zrangeByScore(key, toByteArray(min), toByteArray(max), offset, + count); } public Response> zrangeByScore(byte[] key, byte[] min, - byte[] max, int offset, int count) { - getClient(key).zrangeByScore(key, min, max, offset, count); - return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); + byte[] max, int offset, int count) { + getClient(key).zrangeByScore(key, min, max, offset, count); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); } public Response> zrangeByScoreWithScores(String key, double min, - double max) { - getClient(key).zrangeByScoreWithScores(key, min, max); - return getResponse(BuilderFactory.TUPLE_ZSET); - } - - public Response> zrangeByScoreWithScores(String key, String min, - String max) { - getClient(key).zrangeByScoreWithScores(key, min, max); - return getResponse(BuilderFactory.TUPLE_ZSET); - } - - public Response> zrangeByScoreWithScores(byte[] key, double min, - double max) { - return zrangeByScoreWithScores(key, toByteArray(min), toByteArray(max)); + double max) { + getClient(key).zrangeByScoreWithScores(key, min, max); + return getResponse(BuilderFactory.TUPLE_ZSET); } - public Response> zrangeByScoreWithScores(byte[] key, byte[] min, - byte[] max) { - getClient(key).zrangeByScoreWithScores(key, min, max); - return getResponse(BuilderFactory.TUPLE_ZSET_BINARY); - } - - public Response> zrangeByScoreWithScores(String key, double min, - double max, int offset, int count) { - getClient(key).zrangeByScoreWithScores(key, min, max, offset, count); - return getResponse(BuilderFactory.TUPLE_ZSET); - } - public Response> zrangeByScoreWithScores(String key, String min, - String max, int offset, int count) { - getClient(key).zrangeByScoreWithScores(key, min, max, offset, count); - return getResponse(BuilderFactory.TUPLE_ZSET); + String max) { + getClient(key).zrangeByScoreWithScores(key, min, max); + return getResponse(BuilderFactory.TUPLE_ZSET); } public Response> zrangeByScoreWithScores(byte[] key, double min, - double max, int offset, int count) { - getClient(key).zrangeByScoreWithScores(key, toByteArray(min), toByteArray(max), offset, count); - return getResponse(BuilderFactory.TUPLE_ZSET_BINARY); + double max) { + return zrangeByScoreWithScores(key, toByteArray(min), toByteArray(max)); } public Response> zrangeByScoreWithScores(byte[] key, byte[] min, - byte[] max, int offset, int count) { - getClient(key).zrangeByScoreWithScores(key, min, max, offset, count); - return getResponse(BuilderFactory.TUPLE_ZSET_BINARY); + byte[] max) { + getClient(key).zrangeByScoreWithScores(key, min, max); + return getResponse(BuilderFactory.TUPLE_ZSET_BINARY); + } + + public Response> zrangeByScoreWithScores(String key, double min, + double max, int offset, int count) { + getClient(key).zrangeByScoreWithScores(key, min, max, offset, count); + return getResponse(BuilderFactory.TUPLE_ZSET); + } + + public Response> zrangeByScoreWithScores(String key, String min, + String max, int offset, int count) { + getClient(key).zrangeByScoreWithScores(key, min, max, offset, count); + return getResponse(BuilderFactory.TUPLE_ZSET); + } + + public Response> zrangeByScoreWithScores(byte[] key, double min, + double max, int offset, int count) { + getClient(key).zrangeByScoreWithScores(key, toByteArray(min), + toByteArray(max), offset, count); + return getResponse(BuilderFactory.TUPLE_ZSET_BINARY); + } + + public Response> zrangeByScoreWithScores(byte[] key, byte[] min, + byte[] max, int offset, int count) { + getClient(key).zrangeByScoreWithScores(key, min, max, offset, count); + return getResponse(BuilderFactory.TUPLE_ZSET_BINARY); } public Response> zrevrangeByScore(String key, double max, - double min) { - getClient(key).zrevrangeByScore(key, max, min); - return getResponse(BuilderFactory.STRING_ZSET); + double min) { + getClient(key).zrevrangeByScore(key, max, min); + return getResponse(BuilderFactory.STRING_ZSET); } public Response> zrevrangeByScore(byte[] key, double max, - double min) { - getClient(key).zrevrangeByScore(key, toByteArray(max), toByteArray(min)); - return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); + double min) { + getClient(key) + .zrevrangeByScore(key, toByteArray(max), toByteArray(min)); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); } public Response> zrevrangeByScore(String key, String max, - String min) { - getClient(key).zrevrangeByScore(key, max, min); - return getResponse(BuilderFactory.STRING_ZSET); + String min) { + getClient(key).zrevrangeByScore(key, max, min); + return getResponse(BuilderFactory.STRING_ZSET); } public Response> zrevrangeByScore(byte[] key, byte[] max, - byte[] min) { - getClient(key).zrevrangeByScore(key, max, min); - return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); + byte[] min) { + getClient(key).zrevrangeByScore(key, max, min); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); } public Response> zrevrangeByScore(String key, double max, - double min, int offset, int count) { - getClient(key).zrevrangeByScore(key, max, min, offset, count); - return getResponse(BuilderFactory.STRING_ZSET); + double min, int offset, int count) { + getClient(key).zrevrangeByScore(key, max, min, offset, count); + return getResponse(BuilderFactory.STRING_ZSET); + } + + public Response> zrevrangeByScore(String key, String max, + String min, int offset, int count) { + getClient(key).zrevrangeByScore(key, max, min, offset, count); + return getResponse(BuilderFactory.STRING_ZSET); } - - public Response> zrevrangeByScore(String key, String max, - String min, int offset, int count) { - getClient(key).zrevrangeByScore(key, max, min, offset, count); - return getResponse(BuilderFactory.STRING_ZSET); - } public Response> zrevrangeByScore(byte[] key, double max, - double min, int offset, int count) { - getClient(key).zrevrangeByScore(key, toByteArray(max), toByteArray(min), offset, count); - return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); + double min, int offset, int count) { + getClient(key).zrevrangeByScore(key, toByteArray(max), + toByteArray(min), offset, count); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); } public Response> zrevrangeByScore(byte[] key, byte[] max, - byte[] min, int offset, int count) { - getClient(key).zrevrangeByScore(key, max, min, offset, count); - return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); + byte[] min, int offset, int count) { + getClient(key).zrevrangeByScore(key, max, min, offset, count); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); } public Response> zrevrangeByScoreWithScores(String key, - double max, double min) { - getClient(key).zrevrangeByScoreWithScores(key, max, min); - return getResponse(BuilderFactory.TUPLE_ZSET); - } - - public Response> zrevrangeByScoreWithScores(String key, - String max, String min) { - getClient(key).zrevrangeByScoreWithScores(key, max, min); - return getResponse(BuilderFactory.TUPLE_ZSET); - } - - public Response> zrevrangeByScoreWithScores(byte[] key, - double max, double min) { - getClient(key).zrevrangeByScoreWithScores(key, toByteArray(max), toByteArray(min)); - return getResponse(BuilderFactory.TUPLE_ZSET_BINARY); - } - - public Response> zrevrangeByScoreWithScores(byte[] key, - byte[] max, byte[] min) { - getClient(key).zrevrangeByScoreWithScores(key, max, min); - return getResponse(BuilderFactory.TUPLE_ZSET_BINARY); - } - - public Response> zrevrangeByScoreWithScores(String key, - double max, double min, int offset, int count) { - getClient(key).zrevrangeByScoreWithScores(key, max, min, offset, count); - return getResponse(BuilderFactory.TUPLE_ZSET); - } - - public Response> zrevrangeByScoreWithScores(String key, - String max, String min, int offset, int count) { - getClient(key).zrevrangeByScoreWithScores(key, max, min, offset, count); + double max, double min) { + getClient(key).zrevrangeByScoreWithScores(key, max, min); return getResponse(BuilderFactory.TUPLE_ZSET); - } + } - public Response> zrevrangeByScoreWithScores(byte[] key, - double max, double min, int offset, int count) { - getClient(key).zrevrangeByScoreWithScores(key, toByteArray(max), toByteArray(min), offset, count); - return getResponse(BuilderFactory.TUPLE_ZSET_BINARY); + public Response> zrevrangeByScoreWithScores(String key, + String max, String min) { + getClient(key).zrevrangeByScoreWithScores(key, max, min); + return getResponse(BuilderFactory.TUPLE_ZSET); } public Response> zrevrangeByScoreWithScores(byte[] key, - byte[] max, byte[] min, int offset, int count) { - getClient(key).zrevrangeByScoreWithScores(key, max, min, offset, count); - return getResponse(BuilderFactory.TUPLE_ZSET_BINARY); + double max, double min) { + getClient(key).zrevrangeByScoreWithScores(key, toByteArray(max), + toByteArray(min)); + return getResponse(BuilderFactory.TUPLE_ZSET_BINARY); } - public Response> zrangeWithScores(String key, long start, long end) { - getClient(key).zrangeWithScores(key, start, end); - return getResponse(BuilderFactory.TUPLE_ZSET); + public Response> zrevrangeByScoreWithScores(byte[] key, + byte[] max, byte[] min) { + getClient(key).zrevrangeByScoreWithScores(key, max, min); + return getResponse(BuilderFactory.TUPLE_ZSET_BINARY); } - public Response> zrangeWithScores(byte[] key, long start, long end) { - getClient(key).zrangeWithScores(key, start, end); - return getResponse(BuilderFactory.TUPLE_ZSET_BINARY); + public Response> zrevrangeByScoreWithScores(String key, + double max, double min, int offset, int count) { + getClient(key).zrevrangeByScoreWithScores(key, max, min, offset, count); + return getResponse(BuilderFactory.TUPLE_ZSET); + } + + public Response> zrevrangeByScoreWithScores(String key, + String max, String min, int offset, int count) { + getClient(key).zrevrangeByScoreWithScores(key, max, min, offset, count); + return getResponse(BuilderFactory.TUPLE_ZSET); + } + + public Response> zrevrangeByScoreWithScores(byte[] key, + double max, double min, int offset, int count) { + getClient(key).zrevrangeByScoreWithScores(key, toByteArray(max), + toByteArray(min), offset, count); + return getResponse(BuilderFactory.TUPLE_ZSET_BINARY); + } + + public Response> zrevrangeByScoreWithScores(byte[] key, + byte[] max, byte[] min, int offset, int count) { + getClient(key).zrevrangeByScoreWithScores(key, max, min, offset, count); + return getResponse(BuilderFactory.TUPLE_ZSET_BINARY); + } + + public Response> zrangeWithScores(String key, long start, + long end) { + getClient(key).zrangeWithScores(key, start, end); + return getResponse(BuilderFactory.TUPLE_ZSET); + } + + public Response> zrangeWithScores(byte[] key, long start, + long end) { + getClient(key).zrangeWithScores(key, start, end); + return getResponse(BuilderFactory.TUPLE_ZSET_BINARY); } public Response zrank(String key, String member) { - getClient(key).zrank(key, member); - return getResponse(BuilderFactory.LONG); + getClient(key).zrank(key, member); + return getResponse(BuilderFactory.LONG); } public Response zrank(byte[] key, byte[] member) { - getClient(key).zrank(key, member); - return getResponse(BuilderFactory.LONG); + getClient(key).zrank(key, member); + return getResponse(BuilderFactory.LONG); } public Response zrem(String key, String... member) { - getClient(key).zrem(key, member); - return getResponse(BuilderFactory.LONG); + getClient(key).zrem(key, member); + return getResponse(BuilderFactory.LONG); } public Response zrem(byte[] key, byte[]... member) { - getClient(key).zrem(key, member); - return getResponse(BuilderFactory.LONG); + getClient(key).zrem(key, member); + return getResponse(BuilderFactory.LONG); } public Response zremrangeByRank(String key, long start, long end) { - getClient(key).zremrangeByRank(key, start, end); - return getResponse(BuilderFactory.LONG); + getClient(key).zremrangeByRank(key, start, end); + return getResponse(BuilderFactory.LONG); } public Response zremrangeByRank(byte[] key, long start, long end) { - getClient(key).zremrangeByRank(key, start, end); - return getResponse(BuilderFactory.LONG); + getClient(key).zremrangeByRank(key, start, end); + return getResponse(BuilderFactory.LONG); } public Response zremrangeByScore(String key, double start, double end) { - getClient(key).zremrangeByScore(key, start, end); - return getResponse(BuilderFactory.LONG); + getClient(key).zremrangeByScore(key, start, end); + return getResponse(BuilderFactory.LONG); } - + public Response zremrangeByScore(String key, String start, String end) { - getClient(key).zremrangeByScore(key, start, end); - return getResponse(BuilderFactory.LONG); + getClient(key).zremrangeByScore(key, start, end); + return getResponse(BuilderFactory.LONG); } public Response zremrangeByScore(byte[] key, double start, double end) { - getClient(key).zremrangeByScore(key, toByteArray(start), toByteArray(end)); - return getResponse(BuilderFactory.LONG); + getClient(key).zremrangeByScore(key, toByteArray(start), + toByteArray(end)); + return getResponse(BuilderFactory.LONG); } public Response zremrangeByScore(byte[] key, byte[] start, byte[] end) { - getClient(key).zremrangeByScore(key, start, end); - return getResponse(BuilderFactory.LONG); + getClient(key).zremrangeByScore(key, start, end); + return getResponse(BuilderFactory.LONG); } public Response> zrevrange(String key, long start, long end) { - getClient(key).zrevrange(key, start, end); - return getResponse(BuilderFactory.STRING_ZSET); + getClient(key).zrevrange(key, start, end); + return getResponse(BuilderFactory.STRING_ZSET); } public Response> zrevrange(byte[] key, long start, long end) { - getClient(key).zrevrange(key, start, end); - return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); + getClient(key).zrevrange(key, start, end); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); } public Response> zrevrangeWithScores(String key, long start, - long end) { - getClient(key).zrevrangeWithScores(key, start, end); - return getResponse(BuilderFactory.TUPLE_ZSET); + long end) { + getClient(key).zrevrangeWithScores(key, start, end); + return getResponse(BuilderFactory.TUPLE_ZSET); } public Response> zrevrangeWithScores(byte[] key, long start, - long end) { - getClient(key).zrevrangeWithScores(key, start, end); - return getResponse(BuilderFactory.TUPLE_ZSET); + long end) { + getClient(key).zrevrangeWithScores(key, start, end); + return getResponse(BuilderFactory.TUPLE_ZSET); } public Response zrevrank(String key, String member) { - getClient(key).zrevrank(key, member); - return getResponse(BuilderFactory.LONG); + getClient(key).zrevrank(key, member); + return getResponse(BuilderFactory.LONG); } public Response zrevrank(byte[] key, byte[] member) { - getClient(key).zrevrank(key, member); - return getResponse(BuilderFactory.LONG); + getClient(key).zrevrank(key, member); + return getResponse(BuilderFactory.LONG); } public Response zscore(String key, String member) { - getClient(key).zscore(key, member); - return getResponse(BuilderFactory.DOUBLE); + getClient(key).zscore(key, member); + return getResponse(BuilderFactory.DOUBLE); } public Response zscore(byte[] key, byte[] member) { - getClient(key).zscore(key, member); - return getResponse(BuilderFactory.DOUBLE); + getClient(key).zscore(key, member); + return getResponse(BuilderFactory.DOUBLE); } public Response bitcount(String key) { - getClient(key).bitcount(key); - return getResponse(BuilderFactory.LONG); + getClient(key).bitcount(key); + return getResponse(BuilderFactory.LONG); } public Response bitcount(String key, long start, long end) { - getClient(key).bitcount(key, start, end); - return getResponse(BuilderFactory.LONG); + getClient(key).bitcount(key, start, end); + return getResponse(BuilderFactory.LONG); } public Response bitcount(byte[] key) { - getClient(key).bitcount(key); - return getResponse(BuilderFactory.LONG); + getClient(key).bitcount(key); + return getResponse(BuilderFactory.LONG); } public Response bitcount(byte[] key, long start, long end) { - getClient(key).bitcount(key, start, end); - return getResponse(BuilderFactory.LONG); + getClient(key).bitcount(key, start, end); + return getResponse(BuilderFactory.LONG); } - + public Response dump(String key) { - getClient(key).dump(key); - return getResponse(BuilderFactory.BYTE_ARRAY); + getClient(key).dump(key); + return getResponse(BuilderFactory.BYTE_ARRAY); } - + public Response dump(byte[] key) { - getClient(key).dump(key); - return getResponse(BuilderFactory.BYTE_ARRAY); + getClient(key).dump(key); + return getResponse(BuilderFactory.BYTE_ARRAY); } - - public Response migrate(String host, int port, String key, int destinationDb, int timeout) { - getClient(key).migrate(host, port, key, destinationDb, timeout); - return getResponse(BuilderFactory.STRING); + + public Response migrate(String host, int port, String key, + int destinationDb, int timeout) { + getClient(key).migrate(host, port, key, destinationDb, timeout); + return getResponse(BuilderFactory.STRING); } - - public Response migrate(byte[] host, int port, byte[] key, int destinationDb, int timeout) { - getClient(key).migrate(host, port, key, destinationDb, timeout); - return getResponse(BuilderFactory.STRING); + + public Response migrate(byte[] host, int port, byte[] key, + int destinationDb, int timeout) { + getClient(key).migrate(host, port, key, destinationDb, timeout); + return getResponse(BuilderFactory.STRING); } - + public Response objectRefcount(String key) { - getClient(key).objectRefcount(key); - return getResponse(BuilderFactory.LONG); + getClient(key).objectRefcount(key); + return getResponse(BuilderFactory.LONG); } - + public Response objectRefcount(byte[] key) { - getClient(key).objectRefcount(key); - return getResponse(BuilderFactory.LONG); + getClient(key).objectRefcount(key); + return getResponse(BuilderFactory.LONG); } - + public Response objectEncoding(String key) { - getClient(key).objectEncoding(key); - return getResponse(BuilderFactory.STRING); + getClient(key).objectEncoding(key); + return getResponse(BuilderFactory.STRING); } - + public Response objectEncoding(byte[] key) { - getClient(key).objectEncoding(key); - return getResponse(BuilderFactory.BYTE_ARRAY); + getClient(key).objectEncoding(key); + return getResponse(BuilderFactory.BYTE_ARRAY); } - + public Response objectIdletime(String key) { - getClient(key).objectIdletime(key); - return getResponse(BuilderFactory.LONG); + getClient(key).objectIdletime(key); + return getResponse(BuilderFactory.LONG); } - + public Response objectIdletime(byte[] key) { - getClient(key).objectIdletime(key); - return getResponse(BuilderFactory.LONG); + getClient(key).objectIdletime(key); + return getResponse(BuilderFactory.LONG); } - + public Response pexpire(String key, int milliseconds) { - getClient(key).pexpire(key, milliseconds); - return getResponse(BuilderFactory.LONG); + getClient(key).pexpire(key, milliseconds); + return getResponse(BuilderFactory.LONG); } - + public Response pexpire(byte[] key, int milliseconds) { - getClient(key).pexpire(key, milliseconds); - return getResponse(BuilderFactory.LONG); + getClient(key).pexpire(key, milliseconds); + return getResponse(BuilderFactory.LONG); } - + public Response pexpireAt(String key, long millisecondsTimestamp) { - getClient(key).pexpireAt(key, millisecondsTimestamp); - return getResponse(BuilderFactory.LONG); + getClient(key).pexpireAt(key, millisecondsTimestamp); + return getResponse(BuilderFactory.LONG); } - + public Response pexpireAt(byte[] key, long millisecondsTimestamp) { - getClient(key).pexpireAt(key, millisecondsTimestamp); - return getResponse(BuilderFactory.LONG); + getClient(key).pexpireAt(key, millisecondsTimestamp); + return getResponse(BuilderFactory.LONG); } - + public Response pttl(String key) { - getClient(key).pttl(key); - return getResponse(BuilderFactory.LONG); + getClient(key).pttl(key); + return getResponse(BuilderFactory.LONG); } - + public Response pttl(byte[] key) { - getClient(key).pttl(key); - return getResponse(BuilderFactory.LONG); + getClient(key).pttl(key); + return getResponse(BuilderFactory.LONG); } - + public Response restore(String key, int ttl, byte[] serializedValue) { - getClient(key).restore(key, ttl, serializedValue); - return getResponse(BuilderFactory.STRING); + getClient(key).restore(key, ttl, serializedValue); + return getResponse(BuilderFactory.STRING); } - + public Response restore(byte[] key, int ttl, byte[] serializedValue) { - getClient(key).restore(key, ttl, serializedValue); - return getResponse(BuilderFactory.STRING); + getClient(key).restore(key, ttl, serializedValue); + return getResponse(BuilderFactory.STRING); } - + public Response incrByFloat(String key, double increment) { - getClient(key).incrByFloat(key, increment); - return getResponse(BuilderFactory.DOUBLE); + getClient(key).incrByFloat(key, increment); + return getResponse(BuilderFactory.DOUBLE); } - + public Response incrByFloat(byte[] key, double increment) { - getClient(key).incrByFloat(key, increment); - return getResponse(BuilderFactory.DOUBLE); + getClient(key).incrByFloat(key, increment); + return getResponse(BuilderFactory.DOUBLE); } - + public Response psetex(String key, int milliseconds, String value) { - getClient(key).psetex(key, milliseconds, value); - return getResponse(BuilderFactory.STRING); + getClient(key).psetex(key, milliseconds, value); + return getResponse(BuilderFactory.STRING); } - + public Response psetex(byte[] key, int milliseconds, byte[] value) { - getClient(key).psetex(key, milliseconds, value); - return getResponse(BuilderFactory.STRING); + getClient(key).psetex(key, milliseconds, value); + return getResponse(BuilderFactory.STRING); } - + public Response set(String key, String value, String nxxx) { - getClient(key).set(key, value, nxxx); - return getResponse(BuilderFactory.STRING); + getClient(key).set(key, value, nxxx); + return getResponse(BuilderFactory.STRING); } - + public Response set(byte[] key, byte[] value, byte[] nxxx) { - getClient(key).set(key, value, nxxx); - return getResponse(BuilderFactory.STRING); + getClient(key).set(key, value, nxxx); + return getResponse(BuilderFactory.STRING); } - - public Response set(String key, String value, String nxxx, String expx, int time) { - getClient(key).set(key, value, nxxx, expx, time); - return getResponse(BuilderFactory.STRING); + + public Response set(String key, String value, String nxxx, + String expx, int time) { + getClient(key).set(key, value, nxxx, expx, time); + return getResponse(BuilderFactory.STRING); } - - public Response set(byte[] key, byte[] value, byte[] nxxx, byte[] expx, int time) { - getClient(key).set(key, value, nxxx, expx, time); - return getResponse(BuilderFactory.STRING); + + public Response set(byte[] key, byte[] value, byte[] nxxx, + byte[] expx, int time) { + getClient(key).set(key, value, nxxx, expx, time); + return getResponse(BuilderFactory.STRING); } - - public Response hincrByFloat(String key, String field, double increment) { - getClient(key).hincrByFloat(key, field, increment); - return getResponse(BuilderFactory.DOUBLE); + + public Response hincrByFloat(String key, String field, + double increment) { + getClient(key).hincrByFloat(key, field, increment); + return getResponse(BuilderFactory.DOUBLE); } - - public Response hincrByFloat(byte[] key, byte[] field, double increment) { - getClient(key).hincrByFloat(key, field, increment); - return getResponse(BuilderFactory.DOUBLE); + + public Response hincrByFloat(byte[] key, byte[] field, + double increment) { + getClient(key).hincrByFloat(key, field, increment); + return getResponse(BuilderFactory.DOUBLE); } public Response eval(String script) { - return this.eval(script, 0, new String[0]); + return this.eval(script, 0, new String[0]); } - - public Response eval(String script, List keys, List args) { - String[] argv = Jedis.getParams(keys, args); - return this.eval(script, keys.size(), argv); + + public Response eval(String script, List keys, + List args) { + String[] argv = Jedis.getParams(keys, args); + return this.eval(script, keys.size(), argv); } - + public Response eval(String script, int numKeys, String[] argv) { - getClient(script).eval(script, numKeys, argv); - return getResponse(BuilderFactory.STRING); + getClient(script).eval(script, numKeys, argv); + return getResponse(BuilderFactory.STRING); } - + public Response evalsha(String script) { - return this.evalsha(script, 0, new String[0]); + return this.evalsha(script, 0, new String[0]); } - - public Response evalsha(String sha1, List keys, List args) { - String[] argv = Jedis.getParams(keys, args); - return this.evalsha(sha1, keys.size(), argv); + + public Response evalsha(String sha1, List keys, + List args) { + String[] argv = Jedis.getParams(keys, args); + return this.evalsha(sha1, keys.size(), argv); } - + public Response evalsha(String sha1, int numKeys, String[] argv) { - getClient(sha1).evalsha(sha1, numKeys, argv); - return getResponse(BuilderFactory.STRING); + getClient(sha1).evalsha(sha1, numKeys, argv); + return getResponse(BuilderFactory.STRING); } - - + } diff --git a/src/main/java/redis/clients/jedis/PipelineBlock.java b/src/main/java/redis/clients/jedis/PipelineBlock.java index 9afc391..9cf2f7e 100644 --- a/src/main/java/redis/clients/jedis/PipelineBlock.java +++ b/src/main/java/redis/clients/jedis/PipelineBlock.java @@ -1,6 +1,5 @@ package redis.clients.jedis; - public abstract class PipelineBlock extends Pipeline { public abstract void execute(); } diff --git a/src/main/java/redis/clients/jedis/Protocol.java b/src/main/java/redis/clients/jedis/Protocol.java index db3d915..793b58f 100644 --- a/src/main/java/redis/clients/jedis/Protocol.java +++ b/src/main/java/redis/clients/jedis/Protocol.java @@ -4,14 +4,18 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; +import redis.clients.jedis.exceptions.JedisAskDataException; import redis.clients.jedis.exceptions.JedisConnectionException; import redis.clients.jedis.exceptions.JedisDataException; +import redis.clients.jedis.exceptions.JedisMovedDataException; import redis.clients.util.RedisInputStream; import redis.clients.util.RedisOutputStream; import redis.clients.util.SafeEncoder; public final class Protocol { + private static final String ASK_RESPONSE = "ASK"; + private static final String MOVED_RESPONSE = "MOVED"; public static final int DEFAULT_PORT = 6379; public static final int DEFAULT_SENTINEL_PORT = 26379; public static final int DEFAULT_TIMEOUT = 2000; @@ -29,7 +33,20 @@ public final class Protocol { public static final String SENTINEL_GET_MASTER_ADDR_BY_NAME = "get-master-addr-by-name"; public static final String SENTINEL_RESET = "reset"; public static final String SENTINEL_SLAVES = "slaves"; - public static final String SENTINEL_IS_MASTER_DOWN_BY_ADDR = "is-master-down-by-addr"; + + public static final String CLUSTER_NODES = "nodes"; + public static final String CLUSTER_MEET = "meet"; + public static final String CLUSTER_ADDSLOTS = "addslots"; + public static final String CLUSTER_DELSLOTS = "delslots"; + public static final String CLUSTER_INFO = "info"; + public static final String CLUSTER_GETKEYSINSLOT = "getkeysinslot"; + public static final String CLUSTER_SETSLOT = "setslot"; + public static final String CLUSTER_SETSLOT_NODE = "node"; + public static final String CLUSTER_SETSLOT_MIGRATING = "migrating"; + public static final String CLUSTER_SETSLOT_IMPORTING = "importing"; + public static final String PUBSUB_CHANNELS= "channels"; + public static final String PUBSUB_NUMSUB = "numsub"; + public static final String PUBSUB_NUM_PAT = "numpat"; private Protocol() { // this prevent the class from instantiation @@ -63,9 +80,33 @@ public final class Protocol { private static void processError(final RedisInputStream is) { String message = is.readLine(); + // TODO: I'm not sure if this is the best way to do this. + // Maybe Read only first 5 bytes instead? + if (message.startsWith(MOVED_RESPONSE)) { + String[] movedInfo = parseTargetHostAndSlot(message); + throw new JedisMovedDataException(message, new HostAndPort( + movedInfo[1], Integer.valueOf(movedInfo[2])), + Integer.valueOf(movedInfo[0])); + } else if (message.startsWith(ASK_RESPONSE)) { + String[] askInfo = parseTargetHostAndSlot(message); + throw new JedisAskDataException(message, new HostAndPort( + askInfo[1], Integer.valueOf(askInfo[2])), + Integer.valueOf(askInfo[0])); + } throw new JedisDataException(message); } + private static String[] parseTargetHostAndSlot( + String clusterRedirectResponse) { + String[] response = new String[3]; + String[] messageInfo = clusterRedirectResponse.split(" "); + String[] targetHostAndPort = messageInfo[2].split(":"); + response[0] = messageInfo[1]; + response[1] = targetHostAndPort[0]; + response[2] = targetHostAndPort[1]; + return response; + } + private static Object process(final RedisInputStream is) { try { byte b = is.readByte(); @@ -101,7 +142,11 @@ public final class Protocol { int offset = 0; try { while (offset < len) { - offset += is.read(read, offset, (len - offset)); + int size = is.read(read, offset, (len - offset)); + if (size == -1) + throw new JedisConnectionException( + "It seems like server has closed the connection."); + offset += size; } // read 2 more bytes for the command delimiter is.readByte(); @@ -155,8 +200,7 @@ public final class Protocol { } public static enum Command { - PING, SET, GET, QUIT, EXISTS, DEL, TYPE, FLUSHDB, KEYS, RANDOMKEY, RENAME, RENAMENX, RENAMEX, DBSIZE, EXPIRE, EXPIREAT, TTL, SELECT, MOVE, FLUSHALL, GETSET, MGET, SETNX, SETEX, MSET, MSETNX, DECRBY, DECR, INCRBY, INCR, APPEND, SUBSTR, HSET, HGET, HSETNX, HMSET, HMGET, HINCRBY, HEXISTS, HDEL, HLEN, HKEYS, HVALS, HGETALL, RPUSH, LPUSH, LLEN, LRANGE, LTRIM, LINDEX, LSET, LREM, LPOP, RPOP, RPOPLPUSH, SADD, SMEMBERS, SREM, SPOP, SMOVE, SCARD, SISMEMBER, SINTER, SINTERSTORE, SUNION, SUNIONSTORE, SDIFF, SDIFFSTORE, SRANDMEMBER, ZADD, ZRANGE, ZREM, ZINCRBY, ZRANK, ZREVRANK, ZREVRANGE, ZCARD, ZSCORE, MULTI, DISCARD, EXEC, WATCH, UNWATCH, SORT, BLPOP, BRPOP, AUTH, SUBSCRIBE, PUBLISH, UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, ZCOUNT, ZRANGEBYSCORE, ZREVRANGEBYSCORE, ZREMRANGEBYRANK, ZREMRANGEBYSCORE, ZUNIONSTORE, ZINTERSTORE, SAVE, BGSAVE, BGREWRITEAOF, LASTSAVE, SHUTDOWN, INFO, MONITOR, SLAVEOF, CONFIG, STRLEN, SYNC, LPUSHX, PERSIST, RPUSHX, ECHO, LINSERT, DEBUG, BRPOPLPUSH, SETBIT, GETBIT, SETRANGE, GETRANGE, EVAL, EVALSHA, SCRIPT, SLOWLOG, OBJECT, BITCOUNT, BITOP, SENTINEL, - DUMP, RESTORE, PEXPIRE, PEXPIREAT, PTTL, INCRBYFLOAT, PSETEX, CLIENT, TIME, MIGRATE, HINCRBYFLOAT; + PING, SET, GET, QUIT, EXISTS, DEL, TYPE, FLUSHDB, KEYS, RANDOMKEY, RENAME, RENAMENX, RENAMEX, DBSIZE, EXPIRE, EXPIREAT, TTL, SELECT, MOVE, FLUSHALL, GETSET, MGET, SETNX, SETEX, MSET, MSETNX, DECRBY, DECR, INCRBY, INCR, APPEND, SUBSTR, HSET, HGET, HSETNX, HMSET, HMGET, HINCRBY, HEXISTS, HDEL, HLEN, HKEYS, HVALS, HGETALL, RPUSH, LPUSH, LLEN, LRANGE, LTRIM, LINDEX, LSET, LREM, LPOP, RPOP, RPOPLPUSH, SADD, SMEMBERS, SREM, SPOP, SMOVE, SCARD, SISMEMBER, SINTER, SINTERSTORE, SUNION, SUNIONSTORE, SDIFF, SDIFFSTORE, SRANDMEMBER, ZADD, ZRANGE, ZREM, ZINCRBY, ZRANK, ZREVRANK, ZREVRANGE, ZCARD, ZSCORE, MULTI, DISCARD, EXEC, WATCH, UNWATCH, SORT, BLPOP, BRPOP, AUTH, SUBSCRIBE, PUBLISH, UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, PUBSUB, ZCOUNT, ZRANGEBYSCORE, ZREVRANGEBYSCORE, ZREMRANGEBYRANK, ZREMRANGEBYSCORE, ZUNIONSTORE, ZINTERSTORE, SAVE, BGSAVE, BGREWRITEAOF, LASTSAVE, SHUTDOWN, INFO, MONITOR, SLAVEOF, CONFIG, STRLEN, SYNC, LPUSHX, PERSIST, RPUSHX, ECHO, LINSERT, DEBUG, BRPOPLPUSH, SETBIT, GETBIT, SETRANGE, GETRANGE, EVAL, EVALSHA, SCRIPT, SLOWLOG, OBJECT, BITCOUNT, BITOP, SENTINEL, DUMP, RESTORE, PEXPIRE, PEXPIREAT, PTTL, INCRBYFLOAT, PSETEX, CLIENT, TIME, MIGRATE, HINCRBYFLOAT, SCAN, HSCAN, SSCAN, ZSCAN, WAIT, CLUSTER, ASKING; public final byte[] raw; @@ -166,8 +210,7 @@ public final class Protocol { } public static enum Keyword { - AGGREGATE, ALPHA, ASC, BY, DESC, GET, LIMIT, MESSAGE, NO, NOSORT, PMESSAGE, PSUBSCRIBE, PUNSUBSCRIBE, OK, ONE, QUEUED, SET, STORE, SUBSCRIBE, UNSUBSCRIBE, WEIGHTS, WITHSCORES, RESETSTAT, RESET, FLUSH, EXISTS, LOAD, KILL, LEN, REFCOUNT, ENCODING, IDLETIME, AND, OR, XOR, NOT, - GETNAME, SETNAME,LIST; + AGGREGATE, ALPHA, ASC, BY, DESC, GET, LIMIT, MESSAGE, NO, NOSORT, PMESSAGE, PSUBSCRIBE, PUNSUBSCRIBE, OK, ONE, QUEUED, SET, STORE, SUBSCRIBE, UNSUBSCRIBE, WEIGHTS, WITHSCORES, RESETSTAT, RESET, FLUSH, EXISTS, LOAD, KILL, LEN, REFCOUNT, ENCODING, IDLETIME, AND, OR, XOR, NOT, GETNAME, SETNAME, LIST, MATCH, COUNT; public final byte[] raw; Keyword() { diff --git a/src/main/java/redis/clients/jedis/Queable.java b/src/main/java/redis/clients/jedis/Queable.java index b8ff0e5..769bf16 100644 --- a/src/main/java/redis/clients/jedis/Queable.java +++ b/src/main/java/redis/clients/jedis/Queable.java @@ -7,21 +7,21 @@ public class Queable { private Queue> pipelinedResponses = new LinkedList>(); protected void clean() { - pipelinedResponses.clear(); + pipelinedResponses.clear(); } protected Response generateResponse(Object data) { - Response response = pipelinedResponses.poll(); - if (response != null) { - response.set(data); - } - return response; + Response response = pipelinedResponses.poll(); + if (response != null) { + response.set(data); + } + return response; } protected Response getResponse(Builder builder) { - Response lr = new Response(builder); - pipelinedResponses.add(lr); - return lr; + Response lr = new Response(builder); + pipelinedResponses.add(lr); + return lr; } } diff --git a/src/main/java/redis/clients/jedis/RedisPipeline.java b/src/main/java/redis/clients/jedis/RedisPipeline.java index ff9e862..bb5226c 100644 --- a/src/main/java/redis/clients/jedis/RedisPipeline.java +++ b/src/main/java/redis/clients/jedis/RedisPipeline.java @@ -32,10 +32,7 @@ public interface RedisPipeline { Response getbit(String key, long offset); - - - Response getrange(String key, long startOffset, - long endOffset); + Response getrange(String key, long startOffset, long endOffset); Response getSet(String key, String value); @@ -70,7 +67,7 @@ public interface RedisPipeline { Response lindex(String key, long index); Response linsert(String key, BinaryClient.LIST_POSITION where, - String pivot, String value); + String pivot, String value); Response llen(String key); @@ -118,8 +115,7 @@ public interface RedisPipeline { Response> sort(String key); - Response> sort(String key, - SortingParams sortingParameters); + Response> sort(String key, SortingParams sortingParameters); Response spop(String key); @@ -145,35 +141,31 @@ public interface RedisPipeline { Response> zrange(String key, long start, long end); - Response> zrangeByScore(String key, double min, - double max); + Response> zrangeByScore(String key, double min, double max); - Response> zrangeByScore(String key, String min, - String max); + Response> zrangeByScore(String key, String min, String max); - Response> zrangeByScore(String key, double min, - double max, int offset, int count); + Response> zrangeByScore(String key, double min, double max, + int offset, int count); Response> zrangeByScoreWithScores(String key, double min, - double max); + double max); Response> zrangeByScoreWithScores(String key, double min, - double max, int offset, int count); + double max, int offset, int count); - Response> zrevrangeByScore(String key, double max, - double min); + Response> zrevrangeByScore(String key, double max, double min); - Response> zrevrangeByScore(String key, String max, - String min); + Response> zrevrangeByScore(String key, String max, String min); - Response> zrevrangeByScore(String key, double max, - double min, int offset, int count); + Response> zrevrangeByScore(String key, double max, double min, + int offset, int count); - Response> zrevrangeByScoreWithScores(String key, - double max, double min); + Response> zrevrangeByScoreWithScores(String key, double max, + double min); - Response> zrevrangeByScoreWithScores(String key, - double max, double min, int offset, int count); + Response> zrevrangeByScoreWithScores(String key, double max, + double min, int offset, int count); Response> zrangeWithScores(String key, long start, long end); @@ -187,8 +179,7 @@ public interface RedisPipeline { Response> zrevrange(String key, long start, long end); - Response> zrevrangeWithScores(String key, long start, - long end); + Response> zrevrangeWithScores(String key, long start, long end); Response zrevrank(String key, String member); diff --git a/src/main/java/redis/clients/jedis/Response.java b/src/main/java/redis/clients/jedis/Response.java index 058985f..b17f314 100644 --- a/src/main/java/redis/clients/jedis/Response.java +++ b/src/main/java/redis/clients/jedis/Response.java @@ -10,34 +10,34 @@ public class Response { private Object data; public Response(Builder b) { - this.builder = b; + this.builder = b; } public void set(Object data) { - this.data = data; - set = true; + this.data = data; + set = true; } public T get() { - if (!set) { - throw new JedisDataException( - "Please close pipeline or multi block before calling this method."); - } - if (!built) { - if(data != null ){ - if (data instanceof JedisDataException){ - throw new JedisDataException((JedisDataException)data); - } - response = builder.build(data); - } - this.data = null; - built = true; - } - return response; + if (!set) { + throw new JedisDataException( + "Please close pipeline or multi block before calling this method."); + } + if (!built) { + if (data != null) { + if (data instanceof JedisDataException) { + throw new JedisDataException((JedisDataException) data); + } + response = builder.build(data); + } + this.data = null; + built = true; + } + return response; } public String toString() { - return "Response " + builder.toString(); + return "Response " + builder.toString(); } } diff --git a/src/main/java/redis/clients/jedis/ScanParams.java b/src/main/java/redis/clients/jedis/ScanParams.java new file mode 100644 index 0000000..874d636 --- /dev/null +++ b/src/main/java/redis/clients/jedis/ScanParams.java @@ -0,0 +1,29 @@ +package redis.clients.jedis; + +import static redis.clients.jedis.Protocol.Keyword.COUNT; +import static redis.clients.jedis.Protocol.Keyword.MATCH; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +import redis.clients.util.SafeEncoder; + +public class ScanParams { + private List params = new ArrayList(); + + public void match(final String pattern) { + params.add(MATCH.raw); + params.add(SafeEncoder.encode(pattern)); + } + + public void count(final int count) { + params.add(COUNT.raw); + params.add(Protocol.toByteArray(count)); + } + + public Collection getParams() { + return Collections.unmodifiableCollection(params); + } +} diff --git a/src/main/java/redis/clients/jedis/ScanResult.java b/src/main/java/redis/clients/jedis/ScanResult.java new file mode 100644 index 0000000..d8ba7c6 --- /dev/null +++ b/src/main/java/redis/clients/jedis/ScanResult.java @@ -0,0 +1,21 @@ +package redis.clients.jedis; + +import java.util.List; + +public class ScanResult { + private int cursor; + private List results; + + public ScanResult(int cursor, List results) { + this.cursor = cursor; + this.results = results; + } + + public int getCursor() { + return cursor; + } + + public List getResult() { + return results; + } +} diff --git a/src/main/java/redis/clients/jedis/ShardedJedis.java b/src/main/java/redis/clients/jedis/ShardedJedis.java index 485f83a..02c0e4c 100644 --- a/src/main/java/redis/clients/jedis/ShardedJedis.java +++ b/src/main/java/redis/clients/jedis/ShardedJedis.java @@ -1,13 +1,14 @@ package redis.clients.jedis; -import redis.clients.jedis.BinaryClient.LIST_POSITION; -import redis.clients.util.Hashing; - import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import java.util.regex.Pattern; +import redis.clients.jedis.BinaryClient.LIST_POSITION; +import redis.clients.util.Hashing; + public class ShardedJedis extends BinaryShardedJedis implements JedisCommands { public ShardedJedis(List shards) { super(shards); @@ -37,8 +38,8 @@ public class ShardedJedis extends BinaryShardedJedis implements JedisCommands { } public String echo(String string) { - Jedis j = getShard(string); - return j.echo(string); + Jedis j = getShard(string); + return j.echo(string); } public Boolean exists(String key) { @@ -72,8 +73,8 @@ public class ShardedJedis extends BinaryShardedJedis implements JedisCommands { } public Boolean setbit(String key, long offset, String value) { - Jedis j = getShard(key); - return j.setbit(key, offset, value); + Jedis j = getShard(key); + return j.setbit(key, offset, value); } public Boolean getbit(String key, long offset) { @@ -107,13 +108,13 @@ public class ShardedJedis extends BinaryShardedJedis implements JedisCommands { } public List blpop(String arg) { - Jedis j = getShard(arg); - return j.blpop(arg); + Jedis j = getShard(arg); + return j.blpop(arg); } public List brpop(String arg) { - Jedis j = getShard(arg); - return j.brpop(arg); + Jedis j = getShard(arg); + return j.brpop(arg); } public Long decrBy(String key, long integer) { @@ -227,13 +228,13 @@ public class ShardedJedis extends BinaryShardedJedis implements JedisCommands { } public Long strlen(final String key) { - Jedis j = getShard(key); - return j.strlen(key); + Jedis j = getShard(key); + return j.strlen(key); } public Long move(String key, int dbIndex) { - Jedis j = getShard(key); - return j.move(key, dbIndex); + Jedis j = getShard(key); + return j.move(key, dbIndex); } public Long rpushx(String key, String... string) { @@ -242,8 +243,8 @@ public class ShardedJedis extends BinaryShardedJedis implements JedisCommands { } public Long persist(final String key) { - Jedis j = getShard(key); - return j.persist(key); + Jedis j = getShard(key); + return j.persist(key); } public Long llen(String key) { @@ -326,7 +327,7 @@ public class ShardedJedis extends BinaryShardedJedis implements JedisCommands { return j.zadd(key, score, member); } - public Long zadd(String key, Map scoreMembers) { + public Long zadd(String key, Map scoreMembers) { Jedis j = getShard(key); return j.zadd(key, scoreMembers); } @@ -522,5 +523,18 @@ public class ShardedJedis extends BinaryShardedJedis implements JedisCommands { return j.bitcount(key, start, end); } + public ScanResult> hscan(String key, int cursor) { + Jedis j = getShard(key); + return j.hscan(key, cursor); + } + public ScanResult sscan(String key, int cursor) { + Jedis j = getShard(key); + return j.sscan(key, cursor); + } + + public ScanResult zscan(String key, int cursor) { + Jedis j = getShard(key); + return j.zscan(key, cursor); + } } diff --git a/src/main/java/redis/clients/jedis/ShardedJedisPipeline.java b/src/main/java/redis/clients/jedis/ShardedJedisPipeline.java index be6db92..6b68e95 100644 --- a/src/main/java/redis/clients/jedis/ShardedJedisPipeline.java +++ b/src/main/java/redis/clients/jedis/ShardedJedisPipeline.java @@ -11,27 +11,27 @@ public class ShardedJedisPipeline extends PipelineBase { private Queue clients = new LinkedList(); private static class FutureResult { - private Client client; + private Client client; - public FutureResult(Client client) { - this.client = client; - } + public FutureResult(Client client) { + this.client = client; + } - public Object get() { - return client.getOne(); - } + public Object get() { + return client.getOne(); + } } public void setShardedJedis(BinaryShardedJedis jedis) { - this.jedis = jedis; + this.jedis = jedis; } public List getResults() { - List r = new ArrayList(); - for (FutureResult fr : results) { - r.add(fr.get()); - } - return r; + List r = new ArrayList(); + for (FutureResult fr : results) { + r.add(fr.get()); + } + return r; } /** @@ -40,30 +40,30 @@ public class ShardedJedisPipeline extends PipelineBase { * the different Response<?> of the commands you execute. */ public void sync() { - for (Client client : clients) { - generateResponse(client.getOne()); - } + for (Client client : clients) { + generateResponse(client.getOne()); + } } /** * Syncronize pipeline by reading all responses. This operation closes the * pipeline. Whenever possible try to avoid using this version and use - * ShardedJedisPipeline.sync() as it won't go through all the responses and generate the - * right response type (usually it is a waste of time). - * + * ShardedJedisPipeline.sync() as it won't go through all the responses and + * generate the right response type (usually it is a waste of time). + * * @return A list of all the responses in the order you executed them. */ public List syncAndReturnAll() { - List formatted = new ArrayList(); - for (Client client : clients) { - formatted.add(generateResponse(client.getOne()).get()); - } - return formatted; + List formatted = new ArrayList(); + for (Client client : clients) { + formatted.add(generateResponse(client.getOne()).get()); + } + return formatted; } /** - * This method will be removed in Jedis 3.0. Use the methods that return Response's and call - * sync(). + * This method will be removed in Jedis 3.0. Use the methods that return + * Response's and call sync(). */ @Deprecated public void execute() { @@ -71,17 +71,17 @@ public class ShardedJedisPipeline extends PipelineBase { @Override protected Client getClient(String key) { - Client client = jedis.getShard(key).getClient(); - clients.add(client); - results.add(new FutureResult(client)); - return client; + Client client = jedis.getShard(key).getClient(); + clients.add(client); + results.add(new FutureResult(client)); + return client; } @Override protected Client getClient(byte[] key) { - Client client = jedis.getShard(key).getClient(); - clients.add(client); - results.add(new FutureResult(client)); - return client; + Client client = jedis.getShard(key).getClient(); + clients.add(client); + results.add(new FutureResult(client)); + return client; } } \ No newline at end of file diff --git a/src/main/java/redis/clients/jedis/ShardedJedisPool.java b/src/main/java/redis/clients/jedis/ShardedJedisPool.java index ce11884..dd56ac1 100644 --- a/src/main/java/redis/clients/jedis/ShardedJedisPool.java +++ b/src/main/java/redis/clients/jedis/ShardedJedisPool.java @@ -3,83 +3,101 @@ package redis.clients.jedis; import java.util.List; import java.util.regex.Pattern; -import org.apache.commons.pool.BasePoolableObjectFactory; -import org.apache.commons.pool.impl.GenericObjectPool; +import org.apache.commons.pool2.PooledObject; +import org.apache.commons.pool2.PooledObjectFactory; +import org.apache.commons.pool2.impl.DefaultPooledObject; +import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import redis.clients.util.Hashing; import redis.clients.util.Pool; public class ShardedJedisPool extends Pool { - public ShardedJedisPool(final GenericObjectPool.Config poolConfig, - List shards) { - this(poolConfig, shards, Hashing.MURMUR_HASH); + public ShardedJedisPool(final GenericObjectPoolConfig poolConfig, + List shards) { + this(poolConfig, shards, Hashing.MURMUR_HASH); } - public ShardedJedisPool(final GenericObjectPool.Config poolConfig, - List shards, Hashing algo) { - this(poolConfig, shards, algo, null); + public ShardedJedisPool(final GenericObjectPoolConfig poolConfig, + List shards, Hashing algo) { + this(poolConfig, shards, algo, null); } - public ShardedJedisPool(final GenericObjectPool.Config poolConfig, - List shards, Pattern keyTagPattern) { - this(poolConfig, shards, Hashing.MURMUR_HASH, keyTagPattern); + public ShardedJedisPool(final GenericObjectPoolConfig poolConfig, + List shards, Pattern keyTagPattern) { + this(poolConfig, shards, Hashing.MURMUR_HASH, keyTagPattern); } - public ShardedJedisPool(final GenericObjectPool.Config poolConfig, - List shards, Hashing algo, Pattern keyTagPattern) { - super(poolConfig, new ShardedJedisFactory(shards, algo, keyTagPattern)); + public ShardedJedisPool(final GenericObjectPoolConfig poolConfig, + List shards, Hashing algo, Pattern keyTagPattern) { + super(poolConfig, new ShardedJedisFactory(shards, algo, keyTagPattern)); } /** * PoolableObjectFactory custom impl. */ - private static class ShardedJedisFactory extends BasePoolableObjectFactory { - private List shards; - private Hashing algo; - private Pattern keyTagPattern; + private static class ShardedJedisFactory implements + PooledObjectFactory { + private List shards; + private Hashing algo; + private Pattern keyTagPattern; - public ShardedJedisFactory(List shards, Hashing algo, - Pattern keyTagPattern) { - this.shards = shards; - this.algo = algo; - this.keyTagPattern = keyTagPattern; - } + public ShardedJedisFactory(List shards, Hashing algo, + Pattern keyTagPattern) { + this.shards = shards; + this.algo = algo; + this.keyTagPattern = keyTagPattern; + } - public Object makeObject() throws Exception { - ShardedJedis jedis = new ShardedJedis(shards, algo, keyTagPattern); - return jedis; - } + @Override + public PooledObject makeObject() throws Exception { + ShardedJedis jedis = new ShardedJedis(shards, algo, keyTagPattern); + return new DefaultPooledObject(jedis); + } - public void destroyObject(final Object obj) throws Exception { - if ((obj != null) && (obj instanceof ShardedJedis)) { - ShardedJedis shardedJedis = (ShardedJedis) obj; - for (Jedis jedis : shardedJedis.getAllShards()) { - try { - try { - jedis.quit(); - } catch (Exception e) { + @Override + public void destroyObject(PooledObject pooledShardedJedis) + throws Exception { + final ShardedJedis shardedJedis = pooledShardedJedis.getObject(); + for (Jedis jedis : shardedJedis.getAllShards()) { + try { + try { + jedis.quit(); + } catch (Exception e) { - } - jedis.disconnect(); - } catch (Exception e) { + } + jedis.disconnect(); + } catch (Exception e) { - } - } - } - } + } + } + } - public boolean validateObject(final Object obj) { - try { - ShardedJedis jedis = (ShardedJedis) obj; - for (Jedis shard : jedis.getAllShards()) { - if (!shard.ping().equals("PONG")) { - return false; - } - } - return true; - } catch (Exception ex) { - return false; - } - } + @Override + public boolean validateObject( + PooledObject pooledShardedJedis) { + try { + ShardedJedis jedis = pooledShardedJedis.getObject(); + for (Jedis shard : jedis.getAllShards()) { + if (!shard.ping().equals("PONG")) { + return false; + } + } + return true; + } catch (Exception ex) { + return false; + } + } + + @Override + public void activateObject(PooledObject p) + throws Exception { + + } + + @Override + public void passivateObject(PooledObject p) + throws Exception { + + } } } \ No newline at end of file diff --git a/src/main/java/redis/clients/jedis/SortingParams.java b/src/main/java/redis/clients/jedis/SortingParams.java index cfdf03b..ea0bee8 100644 --- a/src/main/java/redis/clients/jedis/SortingParams.java +++ b/src/main/java/redis/clients/jedis/SortingParams.java @@ -36,7 +36,7 @@ public class SortingParams { * @return the SortingParams Object */ public SortingParams by(final String pattern) { - return by(SafeEncoder.encode(pattern)); + return by(SafeEncoder.encode(pattern)); } /** @@ -53,9 +53,9 @@ public class SortingParams { * @return the SortingParams Object */ public SortingParams by(final byte[] pattern) { - params.add(BY.raw); - params.add(pattern); - return this; + params.add(BY.raw); + params.add(pattern); + return this; } /** @@ -67,13 +67,13 @@ public class SortingParams { * @return the SortingParams Object */ public SortingParams nosort() { - params.add(BY.raw); - params.add(NOSORT.raw); - return this; + params.add(BY.raw); + params.add(NOSORT.raw); + return this; } public Collection getParams() { - return Collections.unmodifiableCollection(params); + return Collections.unmodifiableCollection(params); } /** @@ -82,8 +82,8 @@ public class SortingParams { * @return the sortingParams Object */ public SortingParams desc() { - params.add(DESC.raw); - return this; + params.add(DESC.raw); + return this; } /** @@ -92,8 +92,8 @@ public class SortingParams { * @return the SortingParams Object */ public SortingParams asc() { - params.add(ASC.raw); - return this; + params.add(ASC.raw); + return this; } /** @@ -105,10 +105,10 @@ public class SortingParams { * @return the SortingParams Object */ public SortingParams limit(final int start, final int count) { - params.add(LIMIT.raw); - params.add(Protocol.toByteArray(start)); - params.add(Protocol.toByteArray(count)); - return this; + params.add(LIMIT.raw); + params.add(Protocol.toByteArray(start)); + params.add(Protocol.toByteArray(count)); + return this; } /** @@ -118,8 +118,8 @@ public class SortingParams { * @return the SortingParams Object */ public SortingParams alpha() { - params.add(ALPHA.raw); - return this; + params.add(ALPHA.raw); + return this; } /** @@ -138,11 +138,11 @@ public class SortingParams { * @return the SortingParams Object */ public SortingParams get(String... patterns) { - for (final String pattern : patterns) { - params.add(GET.raw); - params.add(SafeEncoder.encode(pattern)); - } - return this; + for (final String pattern : patterns) { + params.add(GET.raw); + params.add(SafeEncoder.encode(pattern)); + } + return this; } /** @@ -161,10 +161,10 @@ public class SortingParams { * @return the SortingParams Object */ public SortingParams get(byte[]... patterns) { - for (final byte[] pattern : patterns) { - params.add(GET.raw); - params.add(pattern); - } - return this; + for (final byte[] pattern : patterns) { + params.add(GET.raw); + params.add(pattern); + } + return this; } } \ No newline at end of file diff --git a/src/main/java/redis/clients/jedis/Transaction.java b/src/main/java/redis/clients/jedis/Transaction.java index 949f541..69d50d2 100644 --- a/src/main/java/redis/clients/jedis/Transaction.java +++ b/src/main/java/redis/clients/jedis/Transaction.java @@ -6,70 +6,71 @@ import java.util.List; import redis.clients.jedis.exceptions.JedisDataException; /** - * Transaction is nearly identical to Pipeline, only differences are the multi/discard behaviors + * Transaction is nearly identical to Pipeline, only differences are the + * multi/discard behaviors */ public class Transaction extends MultiKeyPipelineBase { protected boolean inTransaction = true; - protected Transaction(){ - // client will be set later in transaction block + protected Transaction() { + // client will be set later in transaction block } public Transaction(final Client client) { - this.client = client; + this.client = client; } @Override protected Client getClient(String key) { - return client; + return client; } @Override protected Client getClient(byte[] key) { - return client; + return client; } public List exec() { - client.exec(); - client.getAll(1); // Discard all but the last reply + client.exec(); + client.getAll(1); // Discard all but the last reply - List unformatted = client.getObjectMultiBulkReply(); - if (unformatted == null) { - return null; - } - List formatted = new ArrayList(); - for (Object o : unformatted) { - try { - formatted.add(generateResponse(o).get()); - } catch (JedisDataException e) { - formatted.add(e); - } - } - return formatted; + List unformatted = client.getObjectMultiBulkReply(); + if (unformatted == null) { + return null; + } + List formatted = new ArrayList(); + for (Object o : unformatted) { + try { + formatted.add(generateResponse(o).get()); + } catch (JedisDataException e) { + formatted.add(e); + } + } + return formatted; } public List> execGetResponse() { - client.exec(); - client.getAll(1); // Discard all but the last reply + client.exec(); + client.getAll(1); // Discard all but the last reply - List unformatted = client.getObjectMultiBulkReply(); - if (unformatted == null) { - return null; - } - List> response = new ArrayList>(); - for (Object o : unformatted) { - response.add(generateResponse(o)); - } - return response; + List unformatted = client.getObjectMultiBulkReply(); + if (unformatted == null) { + return null; + } + List> response = new ArrayList>(); + for (Object o : unformatted) { + response.add(generateResponse(o)); + } + return response; } public String discard() { - client.discard(); - client.getAll(1); // Discard all but the last reply - inTransaction = false; - clean(); - return client.getStatusCodeReply(); + client.discard(); + client.getAll(1); // Discard all but the last reply + inTransaction = false; + clean(); + return client.getStatusCodeReply(); } } \ No newline at end of file diff --git a/src/main/java/redis/clients/jedis/TransactionBlock.java b/src/main/java/redis/clients/jedis/TransactionBlock.java index e784e19..87df232 100644 --- a/src/main/java/redis/clients/jedis/TransactionBlock.java +++ b/src/main/java/redis/clients/jedis/TransactionBlock.java @@ -13,6 +13,6 @@ public abstract class TransactionBlock extends Transaction { public abstract void execute() throws JedisException; public void setClient(Client client) { - this.client = client; + this.client = client; } } diff --git a/src/main/java/redis/clients/jedis/Tuple.java b/src/main/java/redis/clients/jedis/Tuple.java index 211a9e9..ad8d001 100644 --- a/src/main/java/redis/clients/jedis/Tuple.java +++ b/src/main/java/redis/clients/jedis/Tuple.java @@ -9,72 +9,72 @@ public class Tuple implements Comparable { private Double score; public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result; - if (null != element) { - for (final byte b : element) { - result = prime * result + b; - } - } - long temp; - temp = Double.doubleToLongBits(score); - result = prime * result + (int) (temp ^ (temp >>> 32)); - return result; + final int prime = 31; + int result = 1; + result = prime * result; + if (null != element) { + for (final byte b : element) { + result = prime * result + b; + } + } + long temp; + temp = Double.doubleToLongBits(score); + result = prime * result + (int) (temp ^ (temp >>> 32)); + return result; } public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - Tuple other = (Tuple) obj; - if (element == null) { - if (other.element != null) - return false; - } else if (!Arrays.equals(element, other.element)) - return false; - return true; + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Tuple other = (Tuple) obj; + if (element == null) { + if (other.element != null) + return false; + } else if (!Arrays.equals(element, other.element)) + return false; + return true; } public int compareTo(Tuple other) { - if (Arrays.equals(this.element, other.element)) - return 0; - else - return this.score < other.getScore() ? -1 : 1; + if (Arrays.equals(this.element, other.element)) + return 0; + else + return this.score < other.getScore() ? -1 : 1; } public Tuple(String element, Double score) { - super(); - this.element = SafeEncoder.encode(element); - this.score = score; + super(); + this.element = SafeEncoder.encode(element); + this.score = score; } public Tuple(byte[] element, Double score) { - super(); - this.element = element; - this.score = score; + super(); + this.element = element; + this.score = score; } public String getElement() { - if (null != element) { - return SafeEncoder.encode(element); - } else { - return null; - } + if (null != element) { + return SafeEncoder.encode(element); + } else { + return null; + } } public byte[] getBinaryElement() { - return element; + return element; } public double getScore() { - return score; + return score; } public String toString() { - return '[' + Arrays.toString(element) + ',' + score + ']'; + return '[' + Arrays.toString(element) + ',' + score + ']'; } } \ No newline at end of file diff --git a/src/main/java/redis/clients/jedis/ZParams.java b/src/main/java/redis/clients/jedis/ZParams.java index daa6f8e..7b585f3 100644 --- a/src/main/java/redis/clients/jedis/ZParams.java +++ b/src/main/java/redis/clients/jedis/ZParams.java @@ -12,33 +12,33 @@ import redis.clients.util.SafeEncoder; public class ZParams { public enum Aggregate { - SUM, MIN, MAX; + SUM, MIN, MAX; - public final byte[] raw; + public final byte[] raw; - Aggregate() { - raw = SafeEncoder.encode(name()); - } + Aggregate() { + raw = SafeEncoder.encode(name()); + } } private List params = new ArrayList(); public ZParams weights(final int... weights) { - params.add(WEIGHTS.raw); - for (final int weight : weights) { - params.add(Protocol.toByteArray(weight)); - } + params.add(WEIGHTS.raw); + for (final int weight : weights) { + params.add(Protocol.toByteArray(weight)); + } - return this; + return this; } public Collection getParams() { - return Collections.unmodifiableCollection(params); + return Collections.unmodifiableCollection(params); } public ZParams aggregate(final Aggregate aggregate) { - params.add(AGGREGATE.raw); - params.add(aggregate.raw); - return this; + params.add(AGGREGATE.raw); + params.add(aggregate.raw); + return this; } } diff --git a/src/main/java/redis/clients/jedis/exceptions/JedisAskDataException.java b/src/main/java/redis/clients/jedis/exceptions/JedisAskDataException.java new file mode 100644 index 0000000..0544109 --- /dev/null +++ b/src/main/java/redis/clients/jedis/exceptions/JedisAskDataException.java @@ -0,0 +1,23 @@ +package redis.clients.jedis.exceptions; + +import redis.clients.jedis.HostAndPort; + +public class JedisAskDataException extends JedisRedirectionException { + private static final long serialVersionUID = 3878126572474819403L; + + public JedisAskDataException(Throwable cause, HostAndPort targetHost, + int slot) { + super(cause, targetHost, slot); + } + + public JedisAskDataException(String message, Throwable cause, + HostAndPort targetHost, int slot) { + super(message, cause, targetHost, slot); + } + + public JedisAskDataException(String message, HostAndPort targetHost, + int slot) { + super(message, targetHost, slot); + } + +} diff --git a/src/main/java/redis/clients/jedis/exceptions/JedisClusterException.java b/src/main/java/redis/clients/jedis/exceptions/JedisClusterException.java new file mode 100644 index 0000000..7e93b26 --- /dev/null +++ b/src/main/java/redis/clients/jedis/exceptions/JedisClusterException.java @@ -0,0 +1,17 @@ +package redis.clients.jedis.exceptions; + +public class JedisClusterException extends JedisDataException { + private static final long serialVersionUID = 3878126572474819403L; + + public JedisClusterException(Throwable cause) { + super(cause); + } + + public JedisClusterException(String message, Throwable cause) { + super(message, cause); + } + + public JedisClusterException(String message) { + super(message); + } +} diff --git a/src/main/java/redis/clients/jedis/exceptions/JedisClusterMaxRedirectionsException.java b/src/main/java/redis/clients/jedis/exceptions/JedisClusterMaxRedirectionsException.java new file mode 100644 index 0000000..29c289b --- /dev/null +++ b/src/main/java/redis/clients/jedis/exceptions/JedisClusterMaxRedirectionsException.java @@ -0,0 +1,17 @@ +package redis.clients.jedis.exceptions; + +public class JedisClusterMaxRedirectionsException extends JedisDataException { + private static final long serialVersionUID = 3878126572474819403L; + + public JedisClusterMaxRedirectionsException(Throwable cause) { + super(cause); + } + + public JedisClusterMaxRedirectionsException(String message, Throwable cause) { + super(message, cause); + } + + public JedisClusterMaxRedirectionsException(String message) { + super(message); + } +} diff --git a/src/main/java/redis/clients/jedis/exceptions/JedisConnectionException.java b/src/main/java/redis/clients/jedis/exceptions/JedisConnectionException.java index 6e25718..f20c53a 100644 --- a/src/main/java/redis/clients/jedis/exceptions/JedisConnectionException.java +++ b/src/main/java/redis/clients/jedis/exceptions/JedisConnectionException.java @@ -4,14 +4,14 @@ public class JedisConnectionException extends JedisException { private static final long serialVersionUID = 3878126572474819403L; public JedisConnectionException(String message) { - super(message); + super(message); } public JedisConnectionException(Throwable cause) { - super(cause); + super(cause); } public JedisConnectionException(String message, Throwable cause) { - super(message, cause); + super(message, cause); } } diff --git a/src/main/java/redis/clients/jedis/exceptions/JedisDataException.java b/src/main/java/redis/clients/jedis/exceptions/JedisDataException.java index 1a7de9b..9872377 100644 --- a/src/main/java/redis/clients/jedis/exceptions/JedisDataException.java +++ b/src/main/java/redis/clients/jedis/exceptions/JedisDataException.java @@ -4,14 +4,14 @@ public class JedisDataException extends JedisException { private static final long serialVersionUID = 3878126572474819403L; public JedisDataException(String message) { - super(message); + super(message); } public JedisDataException(Throwable cause) { - super(cause); + super(cause); } public JedisDataException(String message, Throwable cause) { - super(message, cause); + super(message, cause); } } diff --git a/src/main/java/redis/clients/jedis/exceptions/JedisException.java b/src/main/java/redis/clients/jedis/exceptions/JedisException.java index f983bf6..f4abb71 100644 --- a/src/main/java/redis/clients/jedis/exceptions/JedisException.java +++ b/src/main/java/redis/clients/jedis/exceptions/JedisException.java @@ -1,18 +1,17 @@ package redis.clients.jedis.exceptions; - public class JedisException extends RuntimeException { private static final long serialVersionUID = -2946266495682282677L; public JedisException(String message) { - super(message); + super(message); } public JedisException(Throwable e) { - super(e); + super(e); } public JedisException(String message, Throwable cause) { - super(message, cause); + super(message, cause); } } diff --git a/src/main/java/redis/clients/jedis/exceptions/JedisMovedDataException.java b/src/main/java/redis/clients/jedis/exceptions/JedisMovedDataException.java new file mode 100644 index 0000000..123f5e3 --- /dev/null +++ b/src/main/java/redis/clients/jedis/exceptions/JedisMovedDataException.java @@ -0,0 +1,22 @@ +package redis.clients.jedis.exceptions; + +import redis.clients.jedis.HostAndPort; + +public class JedisMovedDataException extends JedisRedirectionException { + private static final long serialVersionUID = 3878126572474819403L; + + public JedisMovedDataException(String message, HostAndPort targetNode, + int slot) { + super(message, targetNode, slot); + } + + public JedisMovedDataException(Throwable cause, HostAndPort targetNode, + int slot) { + super(cause, targetNode, slot); + } + + public JedisMovedDataException(String message, Throwable cause, + HostAndPort targetNode, int slot) { + super(message, cause, targetNode, slot); + } +} diff --git a/src/main/java/redis/clients/jedis/exceptions/JedisRedirectionException.java b/src/main/java/redis/clients/jedis/exceptions/JedisRedirectionException.java new file mode 100644 index 0000000..ab96287 --- /dev/null +++ b/src/main/java/redis/clients/jedis/exceptions/JedisRedirectionException.java @@ -0,0 +1,39 @@ +package redis.clients.jedis.exceptions; + +import redis.clients.jedis.HostAndPort; + +public class JedisRedirectionException extends JedisDataException { + private static final long serialVersionUID = 3878126572474819403L; + + private HostAndPort targetNode; + private int slot; + + public JedisRedirectionException(String message, HostAndPort targetNode, + int slot) { + super(message); + this.targetNode = targetNode; + this.slot = slot; + } + + public JedisRedirectionException(Throwable cause, HostAndPort targetNode, + int slot) { + super(cause); + this.targetNode = targetNode; + this.slot = slot; + } + + public JedisRedirectionException(String message, Throwable cause, + HostAndPort targetNode, int slot) { + super(message, cause); + this.targetNode = targetNode; + this.slot = slot; + } + + public HostAndPort getTargetNode() { + return targetNode; + } + + public int getSlot() { + return slot; + } +} diff --git a/src/main/java/redis/clients/util/Hashing.java b/src/main/java/redis/clients/util/Hashing.java index 1460f03..b15a199 100644 --- a/src/main/java/redis/clients/util/Hashing.java +++ b/src/main/java/redis/clients/util/Hashing.java @@ -8,28 +8,28 @@ public interface Hashing { public ThreadLocal md5Holder = new ThreadLocal(); public static final Hashing MD5 = new Hashing() { - public long hash(String key) { - return hash(SafeEncoder.encode(key)); - } + public long hash(String key) { + return hash(SafeEncoder.encode(key)); + } - public long hash(byte[] key) { - try { - if (md5Holder.get() == null) { - md5Holder.set(MessageDigest.getInstance("MD5")); - } - } catch (NoSuchAlgorithmException e) { - throw new IllegalStateException("++++ no md5 algorythm found"); - } - MessageDigest md5 = md5Holder.get(); + public long hash(byte[] key) { + try { + if (md5Holder.get() == null) { + md5Holder.set(MessageDigest.getInstance("MD5")); + } + } catch (NoSuchAlgorithmException e) { + throw new IllegalStateException("++++ no md5 algorythm found"); + } + MessageDigest md5 = md5Holder.get(); - md5.reset(); - md5.update(key); - byte[] bKey = md5.digest(); - long res = ((long) (bKey[3] & 0xFF) << 24) - | ((long) (bKey[2] & 0xFF) << 16) - | ((long) (bKey[1] & 0xFF) << 8) | (long) (bKey[0] & 0xFF); - return res; - } + md5.reset(); + md5.update(key); + byte[] bKey = md5.digest(); + long res = ((long) (bKey[3] & 0xFF) << 24) + | ((long) (bKey[2] & 0xFF) << 16) + | ((long) (bKey[1] & 0xFF) << 8) | (long) (bKey[0] & 0xFF); + return res; + } }; public long hash(String key); diff --git a/src/main/java/redis/clients/util/JedisByteHashMap.java b/src/main/java/redis/clients/util/JedisByteHashMap.java index e13f3b0..cdef172 100644 --- a/src/main/java/redis/clients/util/JedisByteHashMap.java +++ b/src/main/java/redis/clients/util/JedisByteHashMap.java @@ -10,127 +10,127 @@ import java.util.Map; import java.util.Set; public class JedisByteHashMap implements Map, Cloneable, - Serializable { + Serializable { private static final long serialVersionUID = -6971431362627219416L; private Map internalMap = new HashMap(); public void clear() { - internalMap.clear(); + internalMap.clear(); } public boolean containsKey(Object key) { - if (key instanceof byte[]) - return internalMap.containsKey(new ByteArrayWrapper((byte[]) key)); - return internalMap.containsKey(key); + if (key instanceof byte[]) + return internalMap.containsKey(new ByteArrayWrapper((byte[]) key)); + return internalMap.containsKey(key); } public boolean containsValue(Object value) { - return internalMap.containsValue(value); + return internalMap.containsValue(value); } public Set> entrySet() { - Iterator> iterator = internalMap - .entrySet().iterator(); - HashSet> hashSet = new HashSet>(); - while (iterator.hasNext()) { - Entry entry = iterator.next(); - hashSet.add(new JedisByteEntry(entry.getKey().data, entry - .getValue())); - } - return hashSet; + Iterator> iterator = internalMap + .entrySet().iterator(); + HashSet> hashSet = new HashSet>(); + while (iterator.hasNext()) { + Entry entry = iterator.next(); + hashSet.add(new JedisByteEntry(entry.getKey().data, entry + .getValue())); + } + return hashSet; } public byte[] get(Object key) { - if (key instanceof byte[]) - return internalMap.get(new ByteArrayWrapper((byte[]) key)); - return internalMap.get(key); + if (key instanceof byte[]) + return internalMap.get(new ByteArrayWrapper((byte[]) key)); + return internalMap.get(key); } public boolean isEmpty() { - return internalMap.isEmpty(); + return internalMap.isEmpty(); } public Set keySet() { - Set keySet = new HashSet(); - Iterator iterator = internalMap.keySet().iterator(); - while (iterator.hasNext()) { - keySet.add(iterator.next().data); - } - return keySet; + Set keySet = new HashSet(); + Iterator iterator = internalMap.keySet().iterator(); + while (iterator.hasNext()) { + keySet.add(iterator.next().data); + } + return keySet; } public byte[] put(byte[] key, byte[] value) { - return internalMap.put(new ByteArrayWrapper(key), value); + return internalMap.put(new ByteArrayWrapper(key), value); } @SuppressWarnings("unchecked") public void putAll(Map m) { - Iterator iterator = m.entrySet().iterator(); - while (iterator.hasNext()) { - Entry next = (Entry) iterator - .next(); - internalMap.put(new ByteArrayWrapper(next.getKey()), next - .getValue()); - } + Iterator iterator = m.entrySet().iterator(); + while (iterator.hasNext()) { + Entry next = (Entry) iterator + .next(); + internalMap.put(new ByteArrayWrapper(next.getKey()), + next.getValue()); + } } public byte[] remove(Object key) { - if (key instanceof byte[]) - return internalMap.remove(new ByteArrayWrapper((byte[]) key)); - return internalMap.remove(key); + if (key instanceof byte[]) + return internalMap.remove(new ByteArrayWrapper((byte[]) key)); + return internalMap.remove(key); } public int size() { - return internalMap.size(); + return internalMap.size(); } public Collection values() { - return internalMap.values(); + return internalMap.values(); } private static final class ByteArrayWrapper { - private final byte[] data; + private final byte[] data; - public ByteArrayWrapper(byte[] data) { - if (data == null) { - throw new NullPointerException(); - } - this.data = data; - } + public ByteArrayWrapper(byte[] data) { + if (data == null) { + throw new NullPointerException(); + } + this.data = data; + } - public boolean equals(Object other) { - if (!(other instanceof ByteArrayWrapper)) { - return false; - } - return Arrays.equals(data, ((ByteArrayWrapper) other).data); - } + public boolean equals(Object other) { + if (!(other instanceof ByteArrayWrapper)) { + return false; + } + return Arrays.equals(data, ((ByteArrayWrapper) other).data); + } - public int hashCode() { - return Arrays.hashCode(data); - } + public int hashCode() { + return Arrays.hashCode(data); + } } private static final class JedisByteEntry implements Entry { - private byte[] value; - private byte[] key; + private byte[] value; + private byte[] key; - public JedisByteEntry(byte[] key, byte[] value) { - this.key = key; - this.value = value; - } + public JedisByteEntry(byte[] key, byte[] value) { + this.key = key; + this.value = value; + } - public byte[] getKey() { - return this.key; - } + public byte[] getKey() { + return this.key; + } - public byte[] getValue() { - return this.value; - } + public byte[] getValue() { + return this.value; + } - public byte[] setValue(byte[] value) { - this.value = value; - return value; - } + public byte[] setValue(byte[] value) { + this.value = value; + return value; + } } } \ No newline at end of file diff --git a/src/main/java/redis/clients/util/JedisClusterCRC16.java b/src/main/java/redis/clients/util/JedisClusterCRC16.java new file mode 100644 index 0000000..c0d4afb --- /dev/null +++ b/src/main/java/redis/clients/util/JedisClusterCRC16.java @@ -0,0 +1,23 @@ +package redis.clients.util; + +public class JedisClusterCRC16 { + public final static int polynomial = 0x1021; // Represents x^16+x^12+x^5+1 + static int crc; + + public static int getSlot(String key) { + crc = 0x0000; + for (byte b : key.getBytes()) { + for (int i = 0; i < 8; i++) { + boolean bit = ((b >> (7 - i) & 1) == 1); + boolean c15 = ((crc >> 15 & 1) == 1); + crc <<= 1; + // If coefficient of bit and remainder polynomial = 1 xor crc + // with polynomial + if (c15 ^ bit) + crc ^= polynomial; + } + } + + return crc &= 0xffff % 16384; + } +} \ No newline at end of file diff --git a/src/main/java/redis/clients/util/MurmurHash.java b/src/main/java/redis/clients/util/MurmurHash.java index e9327da..7f6aecd 100644 --- a/src/main/java/redis/clients/util/MurmurHash.java +++ b/src/main/java/redis/clients/util/MurmurHash.java @@ -40,7 +40,7 @@ public class MurmurHash implements Hashing { * @return The 32 bit hash of the bytes in question. */ public static int hash(byte[] data, int seed) { - return hash(ByteBuffer.wrap(data), seed); + return hash(ByteBuffer.wrap(data), seed); } /** @@ -57,7 +57,7 @@ public class MurmurHash implements Hashing { * @return The 32-bit hash of the data in question. */ public static int hash(byte[] data, int offset, int length, int seed) { - return hash(ByteBuffer.wrap(data, offset, length), seed); + return hash(ByteBuffer.wrap(data, offset, length), seed); } /** @@ -70,97 +70,97 @@ public class MurmurHash implements Hashing { * @return The 32 bit murmur hash of the bytes in the buffer. */ public static int hash(ByteBuffer buf, int seed) { - // save byte order for later restoration - ByteOrder byteOrder = buf.order(); - buf.order(ByteOrder.LITTLE_ENDIAN); + // save byte order for later restoration + ByteOrder byteOrder = buf.order(); + buf.order(ByteOrder.LITTLE_ENDIAN); - int m = 0x5bd1e995; - int r = 24; + int m = 0x5bd1e995; + int r = 24; - int h = seed ^ buf.remaining(); + int h = seed ^ buf.remaining(); - int k; - while (buf.remaining() >= 4) { - k = buf.getInt(); + int k; + while (buf.remaining() >= 4) { + k = buf.getInt(); - k *= m; - k ^= k >>> r; - k *= m; + k *= m; + k ^= k >>> r; + k *= m; - h *= m; - h ^= k; - } + h *= m; + h ^= k; + } - if (buf.remaining() > 0) { - ByteBuffer finish = ByteBuffer.allocate(4).order( - ByteOrder.LITTLE_ENDIAN); - // for big-endian version, use this first: - // finish.position(4-buf.remaining()); - finish.put(buf).rewind(); - h ^= finish.getInt(); - h *= m; - } + if (buf.remaining() > 0) { + ByteBuffer finish = ByteBuffer.allocate(4).order( + ByteOrder.LITTLE_ENDIAN); + // for big-endian version, use this first: + // finish.position(4-buf.remaining()); + finish.put(buf).rewind(); + h ^= finish.getInt(); + h *= m; + } - h ^= h >>> 13; - h *= m; - h ^= h >>> 15; + h ^= h >>> 13; + h *= m; + h ^= h >>> 15; - buf.order(byteOrder); - return h; + buf.order(byteOrder); + return h; } public static long hash64A(byte[] data, int seed) { - return hash64A(ByteBuffer.wrap(data), seed); + return hash64A(ByteBuffer.wrap(data), seed); } public static long hash64A(byte[] data, int offset, int length, int seed) { - return hash64A(ByteBuffer.wrap(data, offset, length), seed); + return hash64A(ByteBuffer.wrap(data, offset, length), seed); } public static long hash64A(ByteBuffer buf, int seed) { - ByteOrder byteOrder = buf.order(); - buf.order(ByteOrder.LITTLE_ENDIAN); + ByteOrder byteOrder = buf.order(); + buf.order(ByteOrder.LITTLE_ENDIAN); - long m = 0xc6a4a7935bd1e995L; - int r = 47; + long m = 0xc6a4a7935bd1e995L; + int r = 47; - long h = seed ^ (buf.remaining() * m); + long h = seed ^ (buf.remaining() * m); - long k; - while (buf.remaining() >= 8) { - k = buf.getLong(); + long k; + while (buf.remaining() >= 8) { + k = buf.getLong(); - k *= m; - k ^= k >>> r; - k *= m; + k *= m; + k ^= k >>> r; + k *= m; - h ^= k; - h *= m; - } + h ^= k; + h *= m; + } - if (buf.remaining() > 0) { - ByteBuffer finish = ByteBuffer.allocate(8).order( - ByteOrder.LITTLE_ENDIAN); - // for big-endian version, do this first: - // finish.position(8-buf.remaining()); - finish.put(buf).rewind(); - h ^= finish.getLong(); - h *= m; - } + if (buf.remaining() > 0) { + ByteBuffer finish = ByteBuffer.allocate(8).order( + ByteOrder.LITTLE_ENDIAN); + // for big-endian version, do this first: + // finish.position(8-buf.remaining()); + finish.put(buf).rewind(); + h ^= finish.getLong(); + h *= m; + } - h ^= h >>> r; - h *= m; - h ^= h >>> r; + h ^= h >>> r; + h *= m; + h ^= h >>> r; - buf.order(byteOrder); - return h; + buf.order(byteOrder); + return h; } public long hash(byte[] key) { - return hash64A(key, 0x1234ABCD); + return hash64A(key, 0x1234ABCD); } public long hash(String key) { - return hash(SafeEncoder.encode(key)); + return hash(SafeEncoder.encode(key)); } } \ No newline at end of file diff --git a/src/main/java/redis/clients/util/Pool.java b/src/main/java/redis/clients/util/Pool.java index fb4fede..09d8ebb 100644 --- a/src/main/java/redis/clients/util/Pool.java +++ b/src/main/java/redis/clients/util/Pool.java @@ -1,82 +1,84 @@ package redis.clients.util; -import org.apache.commons.pool.PoolableObjectFactory; -import org.apache.commons.pool.impl.GenericObjectPool; +import org.apache.commons.pool2.PooledObjectFactory; +import org.apache.commons.pool2.impl.GenericObjectPool; +import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import redis.clients.jedis.exceptions.JedisConnectionException; import redis.clients.jedis.exceptions.JedisException; public abstract class Pool { - protected GenericObjectPool internalPool; + protected GenericObjectPool internalPool; /** - * Using this constructor means you have to set - * and initialize the internalPool yourself. + * Using this constructor means you have to set and initialize the + * internalPool yourself. */ - public Pool() {} - - public Pool(final GenericObjectPool.Config poolConfig, - PoolableObjectFactory factory) { - initPool(poolConfig, factory); + public Pool() { } - - public void initPool(final GenericObjectPool.Config poolConfig, PoolableObjectFactory factory) { - - if (this.internalPool != null) { - try { - closeInternalPool(); - } catch (Exception e) { - } - } - - this.internalPool = new GenericObjectPool(factory, poolConfig); + + public Pool(final GenericObjectPoolConfig poolConfig, + PooledObjectFactory factory) { + initPool(poolConfig, factory); } - - @SuppressWarnings("unchecked") + + public void initPool(final GenericObjectPoolConfig poolConfig, + PooledObjectFactory factory) { + + if (this.internalPool != null) { + try { + closeInternalPool(); + } catch (Exception e) { + } + } + + this.internalPool = new GenericObjectPool(factory, poolConfig); + } + public T getResource() { - try { - return (T) internalPool.borrowObject(); - } catch (Exception e) { - throw new JedisConnectionException( - "Could not get a resource from the pool", e); - } + try { + return internalPool.borrowObject(); + } catch (Exception e) { + throw new JedisConnectionException( + "Could not get a resource from the pool", e); + } } - - public void returnResourceObject(final Object resource) { - try { - internalPool.returnObject(resource); - } catch (Exception e) { - throw new JedisException( - "Could not return the resource to the pool", e); - } + + public void returnResourceObject(final T resource) { + try { + internalPool.returnObject(resource); + } catch (Exception e) { + throw new JedisException( + "Could not return the resource to the pool", e); + } } - + public void returnBrokenResource(final T resource) { - returnBrokenResourceObject(resource); + returnBrokenResourceObject(resource); } - + public void returnResource(final T resource) { - returnResourceObject(resource); + returnResourceObject(resource); } - + public void destroy() { - closeInternalPool(); + closeInternalPool(); } - - protected void returnBrokenResourceObject(final Object resource) { - try { - internalPool.invalidateObject(resource); - } catch (Exception e) { - throw new JedisException( - "Could not return the resource to the pool", e); - } + + protected void returnBrokenResourceObject(final T resource) { + try { + internalPool.invalidateObject(resource); + } catch (Exception e) { + throw new JedisException( + "Could not return the resource to the pool", e); + } } protected void closeInternalPool() { - try { - internalPool.close(); - } catch (Exception e) { - throw new JedisException("Could not destroy the pool", e); - } + try { + internalPool.close(); + } catch (Exception e) { + throw new JedisException("Could not destroy the pool", e); + } } } \ No newline at end of file diff --git a/src/main/java/redis/clients/util/RedisInputStream.java b/src/main/java/redis/clients/util/RedisInputStream.java index 221e756..5ac8c94 100644 --- a/src/main/java/redis/clients/util/RedisInputStream.java +++ b/src/main/java/redis/clients/util/RedisInputStream.java @@ -29,84 +29,84 @@ public class RedisInputStream extends FilterInputStream { protected int count, limit; public RedisInputStream(InputStream in, int size) { - super(in); - if (size <= 0) { - throw new IllegalArgumentException("Buffer size <= 0"); - } - buf = new byte[size]; + super(in); + if (size <= 0) { + throw new IllegalArgumentException("Buffer size <= 0"); + } + buf = new byte[size]; } public RedisInputStream(InputStream in) { - this(in, 8192); + this(in, 8192); } public byte readByte() throws IOException { - if (count == limit) { - fill(); - } + if (count == limit) { + fill(); + } - return buf[count++]; + return buf[count++]; } public String readLine() { - int b; - byte c; - StringBuilder sb = new StringBuilder(); + int b; + byte c; + StringBuilder sb = new StringBuilder(); - try { - while (true) { - if (count == limit) { - fill(); - } - if (limit == -1) - break; + try { + while (true) { + if (count == limit) { + fill(); + } + if (limit == -1) + break; - b = buf[count++]; - if (b == '\r') { - if (count == limit) { - fill(); - } + b = buf[count++]; + if (b == '\r') { + if (count == limit) { + fill(); + } - if (limit == -1) { - sb.append((char) b); - break; - } + if (limit == -1) { + sb.append((char) b); + break; + } - c = buf[count++]; - if (c == '\n') { - break; - } - sb.append((char) b); - sb.append((char) c); - } else { - sb.append((char) b); - } - } - } catch (IOException e) { - throw new JedisConnectionException(e); - } - String reply = sb.toString(); - if (reply.length() == 0) { - throw new JedisConnectionException( - "It seems like server has closed the connection."); - } - return reply; + c = buf[count++]; + if (c == '\n') { + break; + } + sb.append((char) b); + sb.append((char) c); + } else { + sb.append((char) b); + } + } + } catch (IOException e) { + throw new JedisConnectionException(e); + } + String reply = sb.toString(); + if (reply.length() == 0) { + throw new JedisConnectionException( + "It seems like server has closed the connection."); + } + return reply; } public int read(byte[] b, int off, int len) throws IOException { - if (count == limit) { - fill(); - if (limit == -1) - return -1; - } - final int length = Math.min(limit - count, len); - System.arraycopy(buf, count, b, off, length); - count += length; - return length; + if (count == limit) { + fill(); + if (limit == -1) + return -1; + } + final int length = Math.min(limit - count, len); + System.arraycopy(buf, count, b, off, length); + count += length; + return length; } private void fill() throws IOException { - limit = in.read(buf); - count = 0; + limit = in.read(buf); + count = 0; } } diff --git a/src/main/java/redis/clients/util/RedisOutputStream.java b/src/main/java/redis/clients/util/RedisOutputStream.java index 5708d43..4dba859 100644 --- a/src/main/java/redis/clients/util/RedisOutputStream.java +++ b/src/main/java/redis/clients/util/RedisOutputStream.java @@ -1,11 +1,13 @@ package redis.clients.util; -import java.io.*; +import java.io.FilterOutputStream; +import java.io.IOException; +import java.io.OutputStream; /** - * The class implements a buffered output stream without synchronization - * There are also special operations like in-place string encoding. - * This stream fully ignore mark/reset and should not be used outside Jedis + * The class implements a buffered output stream without synchronization There + * are also special operations like in-place string encoding. This stream fully + * ignore mark/reset and should not be used outside Jedis */ public final class RedisOutputStream extends FilterOutputStream { protected final byte buf[]; @@ -13,218 +15,212 @@ public final class RedisOutputStream extends FilterOutputStream { protected int count; public RedisOutputStream(final OutputStream out) { - this(out, 8192); + this(out, 8192); } public RedisOutputStream(final OutputStream out, final int size) { - super(out); - if (size <= 0) { - throw new IllegalArgumentException("Buffer size <= 0"); - } - buf = new byte[size]; + super(out); + if (size <= 0) { + throw new IllegalArgumentException("Buffer size <= 0"); + } + buf = new byte[size]; } private void flushBuffer() throws IOException { - if (count > 0) { - out.write(buf, 0, count); - count = 0; - } + if (count > 0) { + out.write(buf, 0, count); + count = 0; + } } public void write(final byte b) throws IOException { - buf[count++] = b; - if (count == buf.length) { - flushBuffer(); - } + buf[count++] = b; + if (count == buf.length) { + flushBuffer(); + } } - + public void write(final byte[] b) throws IOException { - write(b, 0, b.length); + write(b, 0, b.length); } - public void write(final byte b[], final int off, final int len) throws IOException { - if (len >= buf.length) { - flushBuffer(); - out.write(b, off, len); - } else { - if (len >= buf.length - count) { - flushBuffer(); - } + public void write(final byte b[], final int off, final int len) + throws IOException { + if (len >= buf.length) { + flushBuffer(); + out.write(b, off, len); + } else { + if (len >= buf.length - count) { + flushBuffer(); + } - System.arraycopy(b, off, buf, count, len); - count += len; - } + System.arraycopy(b, off, buf, count, len); + count += len; + } } public void writeAsciiCrLf(final String in) throws IOException { - final int size = in.length(); + final int size = in.length(); - for (int i = 0; i != size; ++i) { - buf[count++] = (byte) in.charAt(i); - if (count == buf.length) { - flushBuffer(); - } - } + for (int i = 0; i != size; ++i) { + buf[count++] = (byte) in.charAt(i); + if (count == buf.length) { + flushBuffer(); + } + } - writeCrLf(); + writeCrLf(); } public static boolean isSurrogate(final char ch) { - return ch >= Character.MIN_SURROGATE && ch <= Character.MAX_SURROGATE; + return ch >= Character.MIN_SURROGATE && ch <= Character.MAX_SURROGATE; } - public static int utf8Length (final String str) { - int strLen = str.length(), utfLen = 0; - for(int i = 0; i != strLen; ++i) { - char c = str.charAt(i); - if (c < 0x80) { - utfLen++; - } else if (c < 0x800) { - utfLen += 2; - } else if (isSurrogate(c)) { - i++; - utfLen += 4; - } else { - utfLen += 3; - } - } - return utfLen; + public static int utf8Length(final String str) { + int strLen = str.length(), utfLen = 0; + for (int i = 0; i != strLen; ++i) { + char c = str.charAt(i); + if (c < 0x80) { + utfLen++; + } else if (c < 0x800) { + utfLen += 2; + } else if (isSurrogate(c)) { + i++; + utfLen += 4; + } else { + utfLen += 3; + } + } + return utfLen; } public void writeCrLf() throws IOException { - if (2 >= buf.length - count) { - flushBuffer(); - } + if (2 >= buf.length - count) { + flushBuffer(); + } - buf[count++] = '\r'; - buf[count++] = '\n'; + buf[count++] = '\r'; + buf[count++] = '\n'; } public void writeUtf8CrLf(final String str) throws IOException { - int strLen = str.length(); + int strLen = str.length(); - int i; - for (i = 0; i < strLen; i++) { - char c = str.charAt(i); - if (!(c < 0x80)) break; - buf[count++] = (byte) c; - if(count == buf.length) { - flushBuffer(); - } - } + int i; + for (i = 0; i < strLen; i++) { + char c = str.charAt(i); + if (!(c < 0x80)) + break; + buf[count++] = (byte) c; + if (count == buf.length) { + flushBuffer(); + } + } - for (; i < strLen; i++) { - char c = str.charAt(i); - if (c < 0x80) { - buf[count++] = (byte) c; - if(count == buf.length) { - flushBuffer(); - } - } else if (c < 0x800) { - if(2 >= buf.length - count) { - flushBuffer(); - } - buf[count++] = (byte)(0xc0 | (c >> 6)); - buf[count++] = (byte)(0x80 | (c & 0x3f)); - } else if (isSurrogate(c)) { - if(4 >= buf.length - count) { - flushBuffer(); - } - int uc = Character.toCodePoint(c, str.charAt(i++)); - buf[count++] = ((byte)(0xf0 | ((uc >> 18)))); - buf[count++] = ((byte)(0x80 | ((uc >> 12) & 0x3f))); - buf[count++] = ((byte)(0x80 | ((uc >> 6) & 0x3f))); - buf[count++] = ((byte)(0x80 | (uc & 0x3f))); - } else { - if(3 >= buf.length - count) { - flushBuffer(); - } - buf[count++] =((byte)(0xe0 | ((c >> 12)))); - buf[count++] =((byte)(0x80 | ((c >> 6) & 0x3f))); - buf[count++] =((byte)(0x80 | (c & 0x3f))); - } - } + for (; i < strLen; i++) { + char c = str.charAt(i); + if (c < 0x80) { + buf[count++] = (byte) c; + if (count == buf.length) { + flushBuffer(); + } + } else if (c < 0x800) { + if (2 >= buf.length - count) { + flushBuffer(); + } + buf[count++] = (byte) (0xc0 | (c >> 6)); + buf[count++] = (byte) (0x80 | (c & 0x3f)); + } else if (isSurrogate(c)) { + if (4 >= buf.length - count) { + flushBuffer(); + } + int uc = Character.toCodePoint(c, str.charAt(i++)); + buf[count++] = ((byte) (0xf0 | ((uc >> 18)))); + buf[count++] = ((byte) (0x80 | ((uc >> 12) & 0x3f))); + buf[count++] = ((byte) (0x80 | ((uc >> 6) & 0x3f))); + buf[count++] = ((byte) (0x80 | (uc & 0x3f))); + } else { + if (3 >= buf.length - count) { + flushBuffer(); + } + buf[count++] = ((byte) (0xe0 | ((c >> 12)))); + buf[count++] = ((byte) (0x80 | ((c >> 6) & 0x3f))); + buf[count++] = ((byte) (0x80 | (c & 0x3f))); + } + } - writeCrLf(); + writeCrLf(); } - private final static int[] sizeTable = {9, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999, Integer.MAX_VALUE}; + private final static int[] sizeTable = { 9, 99, 999, 9999, 99999, 999999, + 9999999, 99999999, 999999999, Integer.MAX_VALUE }; - private final static byte[] DigitTens = { - '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', - '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', - '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', - '3', '3', '3', '3', '3', '3', '3', '3', '3', '3', - '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', - '5', '5', '5', '5', '5', '5', '5', '5', '5', '5', - '6', '6', '6', '6', '6', '6', '6', '6', '6', '6', - '7', '7', '7', '7', '7', '7', '7', '7', '7', '7', - '8', '8', '8', '8', '8', '8', '8', '8', '8', '8', - '9', '9', '9', '9', '9', '9', '9', '9', '9', '9', - }; + private final static byte[] DigitTens = { '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', + '1', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '3', '3', + '3', '3', '3', '3', '3', '3', '3', '3', '4', '4', '4', '4', '4', + '4', '4', '4', '4', '4', '5', '5', '5', '5', '5', '5', '5', '5', + '5', '5', '6', '6', '6', '6', '6', '6', '6', '6', '6', '6', '7', + '7', '7', '7', '7', '7', '7', '7', '7', '7', '8', '8', '8', '8', + '8', '8', '8', '8', '8', '8', '9', '9', '9', '9', '9', '9', '9', + '9', '9', '9', }; - private final static byte[] DigitOnes = { - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', - }; + private final static byte[] DigitOnes = { '0', '1', '2', '3', '4', '5', + '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', + '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', + '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', + '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', + '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', + '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', + '7', '8', '9', }; - private final static byte[] digits = { - '0', '1', '2', '3', '4', '5', - '6', '7', '8', '9', 'a', 'b', - 'c', 'd', 'e', 'f', 'g', 'h', - 'i', 'j', 'k', 'l', 'm', 'n', - 'o', 'p', 'q', 'r', 's', 't', - 'u', 'v', 'w', 'x', 'y', 'z' - }; + private final static byte[] digits = { '0', '1', '2', '3', '4', '5', '6', + '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', + 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', + 'x', 'y', 'z' }; public void writeIntCrLf(int value) throws IOException { - if (value < 0) { - write('-'); - value = -value; - } + if (value < 0) { + write((byte) '-'); + value = -value; + } - int size = 0; - while (value > sizeTable[size]) - size++; + int size = 0; + while (value > sizeTable[size]) + size++; - size++; - if (size >= buf.length - count) { - flushBuffer(); - } + size++; + if (size >= buf.length - count) { + flushBuffer(); + } - int q, r; - int charPos = count + size; + int q, r; + int charPos = count + size; - while (value >= 65536) { - q = value / 100; - r = value - ((q << 6) + (q << 5) + (q << 2)); - value = q; - buf[--charPos] = DigitOnes[r]; - buf[--charPos] = DigitTens[r]; - } + while (value >= 65536) { + q = value / 100; + r = value - ((q << 6) + (q << 5) + (q << 2)); + value = q; + buf[--charPos] = DigitOnes[r]; + buf[--charPos] = DigitTens[r]; + } - for (; ;) { - q = (value * 52429) >>> (16 + 3); - r = value - ((q << 3) + (q << 1)); - buf[--charPos] = digits[r]; - value = q; - if (value == 0) break; - } - count += size; + for (;;) { + q = (value * 52429) >>> (16 + 3); + r = value - ((q << 3) + (q << 1)); + buf[--charPos] = digits[r]; + value = q; + if (value == 0) + break; + } + count += size; - writeCrLf(); + writeCrLf(); } public void flush() throws IOException { - flushBuffer(); - out.flush(); + flushBuffer(); + out.flush(); } } diff --git a/src/main/java/redis/clients/util/SafeEncoder.java b/src/main/java/redis/clients/util/SafeEncoder.java index a00e6c4..9ec0a7c 100644 --- a/src/main/java/redis/clients/util/SafeEncoder.java +++ b/src/main/java/redis/clients/util/SafeEncoder.java @@ -11,31 +11,31 @@ import redis.clients.jedis.exceptions.JedisException; * */ public class SafeEncoder { - public static byte[][] encodeMany(final String... strs){ - byte[][] many = new byte[strs.length][]; - for(int i=0;i { } public ShardInfo(int weight) { - this.weight = weight; + this.weight = weight; } public int getWeight() { - return this.weight; + return this.weight; } protected abstract T createResource(); - + public abstract String getName(); } diff --git a/src/main/java/redis/clients/util/Sharded.java b/src/main/java/redis/clients/util/Sharded.java index 5448fcd..98c74de 100644 --- a/src/main/java/redis/clients/util/Sharded.java +++ b/src/main/java/redis/clients/util/Sharded.java @@ -26,91 +26,93 @@ public class Sharded> { private Pattern tagPattern = null; // the tag is anything between {} public static final Pattern DEFAULT_KEY_TAG_PATTERN = Pattern - .compile("\\{(.+?)\\}"); + .compile("\\{(.+?)\\}"); public Sharded(List shards) { - this(shards, Hashing.MURMUR_HASH); // MD5 is really not good as we works - // with 64-bits not 128 + this(shards, Hashing.MURMUR_HASH); // MD5 is really not good as we works + // with 64-bits not 128 } public Sharded(List shards, Hashing algo) { - this.algo = algo; - initialize(shards); + this.algo = algo; + initialize(shards); } public Sharded(List shards, Pattern tagPattern) { - this(shards, Hashing.MURMUR_HASH, tagPattern); // MD5 is really not good - // as we works with - // 64-bits not 128 + this(shards, Hashing.MURMUR_HASH, tagPattern); // MD5 is really not good + // as we works with + // 64-bits not 128 } public Sharded(List shards, Hashing algo, Pattern tagPattern) { - this.algo = algo; - this.tagPattern = tagPattern; - initialize(shards); + this.algo = algo; + this.tagPattern = tagPattern; + initialize(shards); } private void initialize(List shards) { - nodes = new TreeMap(); + nodes = new TreeMap(); - for (int i = 0; i != shards.size(); ++i) { - final S shardInfo = shards.get(i); - if (shardInfo.getName() == null) - for (int n = 0; n < 160 * shardInfo.getWeight(); n++) { - nodes.put(this.algo.hash("SHARD-" + i + "-NODE-" + n), shardInfo); - } - else - for (int n = 0; n < 160 * shardInfo.getWeight(); n++) { - nodes.put(this.algo.hash(shardInfo.getName() + "*" + shardInfo.getWeight() + n), shardInfo); - } - resources.put(shardInfo, shardInfo.createResource()); - } + for (int i = 0; i != shards.size(); ++i) { + final S shardInfo = shards.get(i); + if (shardInfo.getName() == null) + for (int n = 0; n < 160 * shardInfo.getWeight(); n++) { + nodes.put(this.algo.hash("SHARD-" + i + "-NODE-" + n), + shardInfo); + } + else + for (int n = 0; n < 160 * shardInfo.getWeight(); n++) { + nodes.put( + this.algo.hash(shardInfo.getName() + "*" + + shardInfo.getWeight() + n), shardInfo); + } + resources.put(shardInfo, shardInfo.createResource()); + } } public R getShard(byte[] key) { - return resources.get(getShardInfo(key)); + return resources.get(getShardInfo(key)); } public R getShard(String key) { - return resources.get(getShardInfo(key)); + return resources.get(getShardInfo(key)); } public S getShardInfo(byte[] key) { - SortedMap tail = nodes.tailMap(algo.hash(key)); - if (tail.isEmpty()) { - return nodes.get(nodes.firstKey()); - } - return tail.get(tail.firstKey()); + SortedMap tail = nodes.tailMap(algo.hash(key)); + if (tail.isEmpty()) { + return nodes.get(nodes.firstKey()); + } + return tail.get(tail.firstKey()); } public S getShardInfo(String key) { - return getShardInfo(SafeEncoder.encode(getKeyTag(key))); + return getShardInfo(SafeEncoder.encode(getKeyTag(key))); } /** * A key tag is a special pattern inside a key that, if preset, is the only * part of the key hashed in order to select the server for this key. - * + * * @see http://code.google.com/p/redis/wiki/FAQ#I * 'm_using_some_form_of_key_hashing_for_partitioning,_but_wh * @param key * @return The tag if it exists, or the original key */ public String getKeyTag(String key) { - if (tagPattern != null) { - Matcher m = tagPattern.matcher(key); - if (m.find()) - return m.group(1); - } - return key; + if (tagPattern != null) { + Matcher m = tagPattern.matcher(key); + if (m.find()) + return m.group(1); + } + return key; } public Collection getAllShardInfo() { - return Collections.unmodifiableCollection(nodes.values()); + return Collections.unmodifiableCollection(nodes.values()); } public Collection getAllShards() { - return Collections.unmodifiableCollection(resources.values()); + return Collections.unmodifiableCollection(resources.values()); } } - diff --git a/src/main/java/redis/clients/util/Slowlog.java b/src/main/java/redis/clients/util/Slowlog.java index 0a0e7be..6e286d9 100644 --- a/src/main/java/redis/clients/util/Slowlog.java +++ b/src/main/java/redis/clients/util/Slowlog.java @@ -4,50 +4,50 @@ import java.util.ArrayList; import java.util.List; public class Slowlog { - private final long id; - private final long timeStamp; - private final long executionTime; - private final List args; - - @SuppressWarnings("unchecked") - public static List from(List nestedMultiBulkReply){ - List logs = new ArrayList(nestedMultiBulkReply.size()); - for(Object obj : nestedMultiBulkReply){ - List properties = (List)obj; - logs.add(new Slowlog(properties)); - } - - return logs; - } - - @SuppressWarnings("unchecked") - private Slowlog(List properties) { - super(); - this.id = (Long)properties.get(0); - this.timeStamp = (Long)properties.get(1); - this.executionTime = (Long)properties.get(2); - - List bargs = (List)properties.get(3); - this.args = new ArrayList(bargs.size()); - - for(byte[] barg:bargs){ - this.args.add(SafeEncoder.encode(barg)); - } + private final long id; + private final long timeStamp; + private final long executionTime; + private final List args; + + @SuppressWarnings("unchecked") + public static List from(List nestedMultiBulkReply) { + List logs = new ArrayList(nestedMultiBulkReply.size()); + for (Object obj : nestedMultiBulkReply) { + List properties = (List) obj; + logs.add(new Slowlog(properties)); } - public long getId() { - return id; - } + return logs; + } - public long getTimeStamp() { - return timeStamp; - } + @SuppressWarnings("unchecked") + private Slowlog(List properties) { + super(); + this.id = (Long) properties.get(0); + this.timeStamp = (Long) properties.get(1); + this.executionTime = (Long) properties.get(2); - public long getExecutionTime() { - return executionTime; - } + List bargs = (List) properties.get(3); + this.args = new ArrayList(bargs.size()); - public List getArgs() { - return args; + for (byte[] barg : bargs) { + this.args.add(SafeEncoder.encode(barg)); } + } + + public long getId() { + return id; + } + + public long getTimeStamp() { + return timeStamp; + } + + public long getExecutionTime() { + return executionTime; + } + + public List getArgs() { + return args; + } } diff --git a/src/test/java/redis/clients/jedis/tests/BuilderFactoryTest.java b/src/test/java/redis/clients/jedis/tests/BuilderFactoryTest.java index b759134..4521112 100644 --- a/src/test/java/redis/clients/jedis/tests/BuilderFactoryTest.java +++ b/src/test/java/redis/clients/jedis/tests/BuilderFactoryTest.java @@ -8,7 +8,7 @@ import redis.clients.jedis.BuilderFactory; public class BuilderFactoryTest extends Assert { @Test public void buildDouble() { - Double build = BuilderFactory.DOUBLE.build("1.0".getBytes()); - assertEquals(new Double(1.0), build); + Double build = BuilderFactory.DOUBLE.build("1.0".getBytes()); + assertEquals(new Double(1.0), build); } } \ No newline at end of file diff --git a/src/test/java/redis/clients/jedis/tests/ConnectionTest.java b/src/test/java/redis/clients/jedis/tests/ConnectionTest.java index eee7ac9..9cbaa12 100644 --- a/src/test/java/redis/clients/jedis/tests/ConnectionTest.java +++ b/src/test/java/redis/clients/jedis/tests/ConnectionTest.java @@ -13,31 +13,31 @@ public class ConnectionTest extends Assert { @Before public void setUp() throws Exception { - client = new Connection(); + client = new Connection(); } @After public void tearDown() throws Exception { - client.disconnect(); + client.disconnect(); } @Test(expected = JedisConnectionException.class) public void checkUnkownHost() { - client.setHost("someunknownhost"); - client.connect(); + client.setHost("someunknownhost"); + client.connect(); } @Test(expected = JedisConnectionException.class) public void checkWrongPort() { - client.setHost("localhost"); - client.setPort(55665); - client.connect(); + client.setHost("localhost"); + client.setPort(55665); + client.connect(); } - + @Test public void connectIfNotConnectedWhenSettingTimeoutInfinite() { client.setHost("localhost"); - client.setPort(6379); + client.setPort(6379); client.setTimeoutInfinite(); } diff --git a/src/test/java/redis/clients/jedis/tests/FragmentedByteArrayInputStream.java b/src/test/java/redis/clients/jedis/tests/FragmentedByteArrayInputStream.java index 37d7d82..fdf8d13 100644 --- a/src/test/java/redis/clients/jedis/tests/FragmentedByteArrayInputStream.java +++ b/src/test/java/redis/clients/jedis/tests/FragmentedByteArrayInputStream.java @@ -9,22 +9,22 @@ public class FragmentedByteArrayInputStream extends ByteArrayInputStream { private int readMethodCallCount = 0; public FragmentedByteArrayInputStream(final byte[] buf) { - super(buf); + super(buf); } public synchronized int read(final byte[] b, final int off, final int len) { - readMethodCallCount++; - if (len <= 10) { - // if the len <= 10, return as usual .. - return super.read(b, off, len); - } else { - // else return the first half .. - return super.read(b, off, len / 2); - } + readMethodCallCount++; + if (len <= 10) { + // if the len <= 10, return as usual .. + return super.read(b, off, len); + } else { + // else return the first half .. + return super.read(b, off, len / 2); + } } public int getReadMethodCallCount() { - return readMethodCallCount; + return readMethodCallCount; } } diff --git a/src/test/java/redis/clients/jedis/tests/HostAndPortUtil.java b/src/test/java/redis/clients/jedis/tests/HostAndPortUtil.java index 648725e..c7be599 100644 --- a/src/test/java/redis/clients/jedis/tests/HostAndPortUtil.java +++ b/src/test/java/redis/clients/jedis/tests/HostAndPortUtil.java @@ -3,112 +3,112 @@ package redis.clients.jedis.tests; import java.util.ArrayList; import java.util.List; +import redis.clients.jedis.HostAndPort; import redis.clients.jedis.Protocol; public class HostAndPortUtil { - private static List redisHostAndPortList = new ArrayList(); - private static List sentinelHostAndPortList = new ArrayList(); + private static List redisHostAndPortList = new ArrayList(); + private static List sentinelHostAndPortList = new ArrayList(); + private static List clusterHostAndPortList = new ArrayList(); static { - - HostAndPort defaulthnp1 = new HostAndPort(); - defaulthnp1.host = "localhost"; - defaulthnp1.port = Protocol.DEFAULT_PORT; - redisHostAndPortList.add(defaulthnp1); - HostAndPort defaulthnp2 = new HostAndPort(); - defaulthnp2.host = "localhost"; - defaulthnp2.port = Protocol.DEFAULT_PORT + 1; - redisHostAndPortList.add(defaulthnp2); - - HostAndPort defaulthnp3 = new HostAndPort(); - defaulthnp3.host = "localhost"; - defaulthnp3.port = Protocol.DEFAULT_PORT + 2; - redisHostAndPortList.add(defaulthnp3); - - HostAndPort defaulthnp4 = new HostAndPort(); - defaulthnp4.host = "localhost"; - defaulthnp4.port = Protocol.DEFAULT_PORT + 3; - redisHostAndPortList.add(defaulthnp4); - - HostAndPort defaulthnp5 = new HostAndPort(); - defaulthnp5.host = "localhost"; - defaulthnp5.port = Protocol.DEFAULT_PORT + 4; - redisHostAndPortList.add(defaulthnp5); - - HostAndPort defaulthnp6 = new HostAndPort(); - defaulthnp6.host = "localhost"; - defaulthnp6.port = Protocol.DEFAULT_SENTINEL_PORT; - sentinelHostAndPortList.add(defaulthnp6); - - HostAndPort defaulthnp7 = new HostAndPort(); - defaulthnp7.host = "localhost"; - defaulthnp7.port = Protocol.DEFAULT_SENTINEL_PORT + 1; - sentinelHostAndPortList.add(defaulthnp7); - - HostAndPort defaulthnp8 = new HostAndPort(); - defaulthnp8.host = "localhost"; - defaulthnp8.port = Protocol.DEFAULT_SENTINEL_PORT + 2; - sentinelHostAndPortList.add(defaulthnp8); + HostAndPort defaulthnp1 = new HostAndPort("localhost", + Protocol.DEFAULT_PORT); + redisHostAndPortList.add(defaulthnp1); - String envRedisHosts = System.getProperty("redis-hosts"); - String envSentinelHosts = System.getProperty("sentinel-hosts"); - - redisHostAndPortList = parseHosts(envRedisHosts, redisHostAndPortList); - sentinelHostAndPortList = parseHosts(envSentinelHosts, sentinelHostAndPortList); + HostAndPort defaulthnp2 = new HostAndPort("localhost", + Protocol.DEFAULT_PORT + 1); + redisHostAndPortList.add(defaulthnp2); + + HostAndPort defaulthnp3 = new HostAndPort("localhost", + Protocol.DEFAULT_PORT + 2); + redisHostAndPortList.add(defaulthnp3); + + HostAndPort defaulthnp4 = new HostAndPort("localhost", + Protocol.DEFAULT_PORT + 3); + redisHostAndPortList.add(defaulthnp4); + + HostAndPort defaulthnp5 = new HostAndPort("localhost", + Protocol.DEFAULT_PORT + 4); + redisHostAndPortList.add(defaulthnp5); + + HostAndPort defaulthnp6 = new HostAndPort("localhost", + Protocol.DEFAULT_PORT + 5); + redisHostAndPortList.add(defaulthnp6); + + HostAndPort defaulthnp7 = new HostAndPort("localhost", + Protocol.DEFAULT_SENTINEL_PORT); + sentinelHostAndPortList.add(defaulthnp7); + + HostAndPort defaulthnp8 = new HostAndPort("localhost", + Protocol.DEFAULT_SENTINEL_PORT + 1); + sentinelHostAndPortList.add(defaulthnp8); + + HostAndPort defaulthnp9 = new HostAndPort("localhost", + Protocol.DEFAULT_SENTINEL_PORT + 2); + sentinelHostAndPortList.add(defaulthnp9); + + clusterHostAndPortList.add(new HostAndPort("localhost", 7379)); + clusterHostAndPortList.add(new HostAndPort("localhost", 7380)); + clusterHostAndPortList.add(new HostAndPort("localhost", 7381)); + + String envRedisHosts = System.getProperty("redis-hosts"); + String envSentinelHosts = System.getProperty("sentinel-hosts"); + String envClusterHosts = System.getProperty("cluster-hosts"); + + redisHostAndPortList = parseHosts(envRedisHosts, redisHostAndPortList); + sentinelHostAndPortList = parseHosts(envSentinelHosts, + sentinelHostAndPortList); + clusterHostAndPortList = parseHosts(envClusterHosts, + clusterHostAndPortList); } - public static List parseHosts(String envHosts, List existingHostsAndPorts) { - - if (null != envHosts && 0 < envHosts.length()) { - - String[] hostDefs = envHosts.split(","); - - if (null != hostDefs && 2 <= hostDefs.length) { - - List envHostsAndPorts = new ArrayList(hostDefs.length); - - for (String hostDef : hostDefs) { - - String[] hostAndPort = hostDef.split(":"); - - if (null != hostAndPort && 2 == hostAndPort.length) { - - HostAndPort hnp = new HostAndPort(); - hnp.host = hostAndPort[0]; - - try { - hnp.port = Integer.parseInt(hostAndPort[1]); - } catch (final NumberFormatException nfe) { - hnp.port = Protocol.DEFAULT_PORT; - } - - envHostsAndPorts.add(hnp); - } - } - - return envHostsAndPorts; - } - } - - return existingHostsAndPorts; + public static List parseHosts(String envHosts, + List existingHostsAndPorts) { + + if (null != envHosts && 0 < envHosts.length()) { + + String[] hostDefs = envHosts.split(","); + + if (null != hostDefs && 2 <= hostDefs.length) { + + List envHostsAndPorts = new ArrayList( + hostDefs.length); + + for (String hostDef : hostDefs) { + + String[] hostAndPort = hostDef.split(":"); + + if (null != hostAndPort && 2 == hostAndPort.length) { + String host = hostAndPort[0]; + int port = Protocol.DEFAULT_PORT; + + try { + port = Integer.parseInt(hostAndPort[1]); + } catch (final NumberFormatException nfe) { + } + + envHostsAndPorts.add(new HostAndPort(host, port)); + } + } + + return envHostsAndPorts; + } + } + + return existingHostsAndPorts; } - + public static List getRedisServers() { - return redisHostAndPortList; - } - - public static List getSentinelServers() { - return sentinelHostAndPortList; + return redisHostAndPortList; } - public static class HostAndPort { - public String host; - public int port; - - @Override - public String toString() { - return host + ":" + port; - } + public static List getSentinelServers() { + return sentinelHostAndPortList; + } + + public static List getClusterServers() { + return clusterHostAndPortList; } } diff --git a/src/test/java/redis/clients/jedis/tests/JedisClusterTest.java b/src/test/java/redis/clients/jedis/tests/JedisClusterTest.java new file mode 100644 index 0000000..356e642 --- /dev/null +++ b/src/test/java/redis/clients/jedis/tests/JedisClusterTest.java @@ -0,0 +1,195 @@ +package redis.clients.jedis.tests; + +import java.util.HashSet; +import java.util.Set; + +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import redis.clients.jedis.HostAndPort; +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisCluster; +import redis.clients.jedis.Pipeline; +import redis.clients.jedis.exceptions.JedisAskDataException; +import redis.clients.jedis.exceptions.JedisClusterException; +import redis.clients.jedis.exceptions.JedisClusterMaxRedirectionsException; +import redis.clients.jedis.exceptions.JedisMovedDataException; +import redis.clients.util.JedisClusterCRC16; + +public class JedisClusterTest extends Assert { + private Jedis node1; + private Jedis node2; + private Jedis node3; + + private HostAndPort nodeInfo1 = HostAndPortUtil.getClusterServers().get(0); + private HostAndPort nodeInfo2 = HostAndPortUtil.getClusterServers().get(1); + private HostAndPort nodeInfo3 = HostAndPortUtil.getClusterServers().get(2); + + @Before + public void setUp() throws InterruptedException { + node1 = new Jedis(nodeInfo1.getHost(), nodeInfo1.getPort()); + node1.connect(); + node1.flushAll(); + + node2 = new Jedis(nodeInfo2.getHost(), nodeInfo2.getPort()); + node2.connect(); + node2.flushAll(); + + node3 = new Jedis(nodeInfo3.getHost(), nodeInfo3.getPort()); + node3.connect(); + node3.flushAll(); + + // ---- configure cluster + + // add nodes to cluster + node1.clusterMeet("127.0.0.1", nodeInfo2.getPort()); + node1.clusterMeet("127.0.0.1", nodeInfo3.getPort()); + + // split available slots across the three nodes + int slotsPerNode = JedisCluster.HASHSLOTS / 3; + Pipeline pipeline1 = node1.pipelined(); + Pipeline pipeline2 = node2.pipelined(); + Pipeline pipeline3 = node3.pipelined(); + for (int i = 0; i < JedisCluster.HASHSLOTS; i++) { + if (i < slotsPerNode) { + pipeline1.clusterAddSlots(i); + } else if (i > slotsPerNode * 2) { + pipeline3.clusterAddSlots(i); + } else { + pipeline2.clusterAddSlots(i); + } + } + pipeline1.sync(); + pipeline2.sync(); + pipeline3.sync(); + + waitForClusterReady(); + } + + @After + public void tearDown() { + // clear all slots + int[] slotsToDelete = new int[JedisCluster.HASHSLOTS]; + for (int i = 0; i < JedisCluster.HASHSLOTS; i++) { + slotsToDelete[i] = i; + } + node1.clusterDelSlots(slotsToDelete); + node2.clusterDelSlots(slotsToDelete); + node3.clusterDelSlots(slotsToDelete); + } + + @Test(expected = JedisMovedDataException.class) + public void testThrowMovedException() { + node1.set("foo", "bar"); + } + + @Test + public void testMovedExceptionParameters() { + try { + node1.set("foo", "bar"); + } catch (JedisMovedDataException jme) { + assertEquals(12182, jme.getSlot()); + assertEquals(new HostAndPort("127.0.0.1", 7381), + jme.getTargetNode()); + return; + } + fail(); + } + + @Test(expected = JedisAskDataException.class) + public void testThrowAskException() { + int keySlot = JedisClusterCRC16.getSlot("test"); + String node3Id = getNodeId(node3.clusterNodes()); + node2.clusterSetSlotMigrating(keySlot, node3Id); + node2.get("test"); + } + + @Test + public void testDiscoverNodesAutomatically() { + Set jedisClusterNode = new HashSet(); + jedisClusterNode.add(new HostAndPort("127.0.0.1", 7379)); + JedisCluster jc = new JedisCluster(jedisClusterNode); + assertEquals(jc.getClusterNodes().size(), 3); + } + + @Test + public void testCalculateConnectionPerSlot() { + Set jedisClusterNode = new HashSet(); + jedisClusterNode.add(new HostAndPort("127.0.0.1", 7379)); + JedisCluster jc = new JedisCluster(jedisClusterNode); + jc.set("foo", "bar"); + jc.set("test", "test"); + assertEquals("bar", node3.get("foo")); + assertEquals("test", node2.get("test")); + } + + @Test + public void testRecalculateSlotsWhenMoved() throws InterruptedException { + Set jedisClusterNode = new HashSet(); + jedisClusterNode.add(new HostAndPort("127.0.0.1", 7379)); + JedisCluster jc = new JedisCluster(jedisClusterNode); + int slot51 = JedisClusterCRC16.getSlot("51"); + node2.clusterDelSlots(slot51); + node3.clusterDelSlots(slot51); + node3.clusterAddSlots(slot51); + + waitForClusterReady(); + jc.set("51", "foo"); + assertEquals("foo", jc.get("51")); + } + + @Test + public void testAskResponse() throws InterruptedException { + Set jedisClusterNode = new HashSet(); + jedisClusterNode.add(new HostAndPort("127.0.0.1", 7379)); + JedisCluster jc = new JedisCluster(jedisClusterNode); + int slot51 = JedisClusterCRC16.getSlot("51"); + node3.clusterSetSlotImporting(slot51, getNodeId(node2.clusterNodes())); + node2.clusterSetSlotMigrating(slot51, getNodeId(node3.clusterNodes())); + jc.set("51", "foo"); + assertEquals("foo", jc.get("51")); + } + + @Test(expected = JedisClusterException.class) + public void testThrowExceptionWithoutKey() { + Set jedisClusterNode = new HashSet(); + jedisClusterNode.add(new HostAndPort("127.0.0.1", 7379)); + JedisCluster jc = new JedisCluster(jedisClusterNode); + jc.ping(); + } + + @Test(expected = JedisClusterMaxRedirectionsException.class) + public void testRedisClusterMaxRedirections() { + Set jedisClusterNode = new HashSet(); + jedisClusterNode.add(new HostAndPort("127.0.0.1", 7379)); + JedisCluster jc = new JedisCluster(jedisClusterNode); + int slot51 = JedisClusterCRC16.getSlot("51"); + // This will cause an infinite redirection loop + node2.clusterSetSlotMigrating(slot51, getNodeId(node3.clusterNodes())); + jc.set("51", "foo"); + } + + private String getNodeId(String infoOutput) { + for (String infoLine : infoOutput.split("\n")) { + if (infoLine.contains("myself")) { + return infoLine.split(" ")[0]; + } + } + return ""; + } + + private void waitForClusterReady() throws InterruptedException { + boolean clusterOk = false; + while (!clusterOk) { + if (node1.clusterInfo().split("\n")[0].contains("ok") + && node2.clusterInfo().split("\n")[0].contains("ok") + && node3.clusterInfo().split("\n")[0].contains("ok")) { + clusterOk = true; + } + Thread.sleep(50); + } + } + +} diff --git a/src/test/java/redis/clients/jedis/tests/JedisPoolTest.java b/src/test/java/redis/clients/jedis/tests/JedisPoolTest.java index 58964ff..a501024 100644 --- a/src/test/java/redis/clients/jedis/tests/JedisPoolTest.java +++ b/src/test/java/redis/clients/jedis/tests/JedisPoolTest.java @@ -3,128 +3,120 @@ package redis.clients.jedis.tests; import java.net.URI; import java.net.URISyntaxException; -import org.apache.commons.pool.impl.GenericObjectPool; -import org.apache.commons.pool.impl.GenericObjectPool.Config; +import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import org.junit.Assert; import org.junit.Test; -import redis.clients.jedis.BinaryJedis; +import redis.clients.jedis.HostAndPort; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; +import redis.clients.jedis.Transaction; import redis.clients.jedis.exceptions.JedisConnectionException; -import redis.clients.jedis.tests.HostAndPortUtil.HostAndPort; public class JedisPoolTest extends Assert { private static HostAndPort hnp = HostAndPortUtil.getRedisServers().get(0); @Test public void checkConnections() { - JedisPool pool = new JedisPool(new JedisPoolConfig(), hnp.host, - hnp.port, 2000); - Jedis jedis = pool.getResource(); - jedis.auth("foobared"); - jedis.set("foo", "bar"); - assertEquals("bar", jedis.get("foo")); - pool.returnResource(jedis); - pool.destroy(); + JedisPool pool = new JedisPool(new JedisPoolConfig(), hnp.getHost(), + hnp.getPort(), 2000); + Jedis jedis = pool.getResource(); + jedis.auth("foobared"); + jedis.set("foo", "bar"); + assertEquals("bar", jedis.get("foo")); + pool.returnResource(jedis); + pool.destroy(); } @Test public void checkConnectionWithDefaultPort() { - JedisPool pool = new JedisPool(new JedisPoolConfig(), hnp.host, - hnp.port); - Jedis jedis = pool.getResource(); - jedis.auth("foobared"); - jedis.set("foo", "bar"); - assertEquals("bar", jedis.get("foo")); - pool.returnResource(jedis); - pool.destroy(); + JedisPool pool = new JedisPool(new JedisPoolConfig(), hnp.getHost(), + hnp.getPort()); + Jedis jedis = pool.getResource(); + jedis.auth("foobared"); + jedis.set("foo", "bar"); + assertEquals("bar", jedis.get("foo")); + pool.returnResource(jedis); + pool.destroy(); } @Test public void checkJedisIsReusedWhenReturned() { - JedisPool pool = new JedisPool(new JedisPoolConfig(), hnp.host, - hnp.port); - Jedis jedis = pool.getResource(); - jedis.auth("foobared"); - jedis.set("foo", "0"); - pool.returnResource(jedis); - jedis = pool.getResource(); - jedis.auth("foobared"); - jedis.incr("foo"); - pool.returnResource(jedis); - pool.destroy(); + JedisPool pool = new JedisPool(new JedisPoolConfig(), hnp.getHost(), + hnp.getPort()); + Jedis jedis = pool.getResource(); + jedis.auth("foobared"); + jedis.set("foo", "0"); + pool.returnResource(jedis); + + jedis = pool.getResource(); + jedis.auth("foobared"); + jedis.incr("foo"); + pool.returnResource(jedis); + pool.destroy(); } @Test public void checkPoolRepairedWhenJedisIsBroken() { - JedisPool pool = new JedisPool(new JedisPoolConfig(), hnp.host, - hnp.port); - Jedis jedis = pool.getResource(); - jedis.auth("foobared"); - jedis.quit(); - pool.returnBrokenResource(jedis); + JedisPool pool = new JedisPool(new JedisPoolConfig(), hnp.getHost(), + hnp.getPort()); + Jedis jedis = pool.getResource(); + jedis.auth("foobared"); + jedis.quit(); + pool.returnBrokenResource(jedis); - jedis = pool.getResource(); - jedis.auth("foobared"); - jedis.incr("foo"); - pool.returnResource(jedis); - pool.destroy(); + jedis = pool.getResource(); + jedis.auth("foobared"); + jedis.incr("foo"); + pool.returnResource(jedis); + pool.destroy(); } @Test(expected = JedisConnectionException.class) public void checkPoolOverflow() { - Config config = new Config(); - config.maxActive = 1; - config.whenExhaustedAction = GenericObjectPool.WHEN_EXHAUSTED_FAIL; - JedisPool pool = new JedisPool(config, hnp.host, hnp.port); - Jedis jedis = pool.getResource(); - jedis.auth("foobared"); - jedis.set("foo", "0"); + GenericObjectPoolConfig config = new GenericObjectPoolConfig(); + config.setMaxTotal(1); + config.setBlockWhenExhausted(false); + JedisPool pool = new JedisPool(config, hnp.getHost(), hnp.getPort()); + Jedis jedis = pool.getResource(); + jedis.auth("foobared"); + jedis.set("foo", "0"); - Jedis newJedis = pool.getResource(); - newJedis.auth("foobared"); - newJedis.incr("foo"); + Jedis newJedis = pool.getResource(); + newJedis.auth("foobared"); + newJedis.incr("foo"); } @Test public void securePool() { - JedisPoolConfig config = new JedisPoolConfig(); - config.setTestOnBorrow(true); - JedisPool pool = new JedisPool(config, hnp.host, hnp.port, 2000, "foobared"); - Jedis jedis = pool.getResource(); - jedis.set("foo", "bar"); - pool.returnResource(jedis); - pool.destroy(); + JedisPoolConfig config = new JedisPoolConfig(); + config.setTestOnBorrow(true); + JedisPool pool = new JedisPool(config, hnp.getHost(), hnp.getPort(), + 2000, "foobared"); + Jedis jedis = pool.getResource(); + jedis.set("foo", "bar"); + pool.returnResource(jedis); + pool.destroy(); } @Test public void nonDefaultDatabase() { - JedisPool pool0 = new JedisPool(new JedisPoolConfig(), hnp.host, - hnp.port, 2000, "foobared"); - Jedis jedis0 = pool0.getResource(); - jedis0.set("foo", "bar"); - assertEquals( "bar", jedis0.get("foo") ); - pool0.returnResource(jedis0); - pool0.destroy(); + JedisPool pool0 = new JedisPool(new JedisPoolConfig(), hnp.getHost(), + hnp.getPort(), 2000, "foobared"); + Jedis jedis0 = pool0.getResource(); + jedis0.set("foo", "bar"); + assertEquals("bar", jedis0.get("foo")); + pool0.returnResource(jedis0); + pool0.destroy(); - JedisPool pool1 = new JedisPool(new JedisPoolConfig(), hnp.host, - hnp.port, 2000, "foobared", 1); - Jedis jedis1 = pool1.getResource(); - assertNull( jedis1.get("foo") ); - pool1.returnResource(jedis0); - pool1.destroy(); - } - - @Test - public void returnBinary() { - JedisPool pool = new JedisPool(new JedisPoolConfig(), hnp.host, - hnp.port, 2000); - BinaryJedis jedis = pool.getResource(); - pool.returnResource(jedis); - pool.destroy(); + JedisPool pool1 = new JedisPool(new JedisPoolConfig(), hnp.getHost(), + hnp.getPort(), 2000, "foobared", 1); + Jedis jedis1 = pool1.getResource(); + assertNull(jedis1.get("foo")); + pool1.returnResource(jedis1); + pool1.destroy(); } @Test @@ -145,43 +137,65 @@ public class JedisPoolTest extends Assert { j.auth("foobared"); j.select(2); j.set("foo", "bar"); - JedisPool pool = new JedisPool(new URI("redis://:foobared@localhost:6380/2")); + JedisPool pool = new JedisPool(new URI( + "redis://:foobared@localhost:6380/2")); Jedis jedis = pool.getResource(); assertEquals("PONG", jedis.ping()); assertEquals("bar", jedis.get("foo")); } - @Test - public void selectDatabaseOnActivation() { - JedisPool pool = new JedisPool(new JedisPoolConfig(), hnp.host, hnp.port, 2000, "foobared"); + @Test + public void selectDatabaseOnActivation() { + JedisPool pool = new JedisPool(new JedisPoolConfig(), hnp.getHost(), + hnp.getPort(), 2000, "foobared"); - Jedis jedis0 = pool.getResource(); - assertEquals(0L, jedis0.getDB().longValue()); - - jedis0.select(1); - assertEquals(1L, jedis0.getDB().longValue()); + Jedis jedis0 = pool.getResource(); + assertEquals(0L, jedis0.getDB().longValue()); - pool.returnResource(jedis0); + jedis0.select(1); + assertEquals(1L, jedis0.getDB().longValue()); - Jedis jedis1 = pool.getResource(); - assertTrue("Jedis instance was not reused", jedis1 == jedis0); - assertEquals(0L, jedis1.getDB().longValue()); + pool.returnResource(jedis0); - pool.returnResource(jedis1); - pool.destroy(); - } + Jedis jedis1 = pool.getResource(); + assertTrue("Jedis instance was not reused", jedis1 == jedis0); + assertEquals(0L, jedis1.getDB().longValue()); + + pool.returnResource(jedis1); + pool.destroy(); + } @Test public void customClientName() { - JedisPool pool0 = new JedisPool(new JedisPoolConfig(), hnp.host, - hnp.port, 2000, "foobared", 0, "my_shiny_client_name"); + JedisPool pool0 = new JedisPool(new JedisPoolConfig(), hnp.getHost(), + hnp.getPort(), 2000, "foobared", 0, "my_shiny_client_name"); - Jedis jedis = pool0.getResource(); + Jedis jedis = pool0.getResource(); - assertEquals("my_shiny_client_name", jedis.clientGetname()); + assertEquals("my_shiny_client_name", jedis.clientGetname()); - pool0.returnResource(jedis); - pool0.destroy(); + pool0.returnResource(jedis); + pool0.destroy(); + } + + @Test + public void returnResourceShouldResetState() { + GenericObjectPoolConfig config = new GenericObjectPoolConfig(); + config.setMaxTotal(1); + config.setBlockWhenExhausted(false); + JedisPool pool = new JedisPool(config, hnp.getHost(), hnp.getPort(), + 2000, "foobared"); + + Jedis jedis = pool.getResource(); + jedis.set("hello", "jedis"); + Transaction t = jedis.multi(); + t.set("hello", "world"); + pool.returnResource(jedis); + + Jedis jedis2 = pool.getResource(); + assertTrue(jedis == jedis2); + assertEquals("jedis", jedis2.get("hello")); + pool.returnResource(jedis2); + pool.destroy(); } } - diff --git a/src/test/java/redis/clients/jedis/tests/JedisSentinelPoolTest.java b/src/test/java/redis/clients/jedis/tests/JedisSentinelPoolTest.java index 5f8e494..f8a3ee2 100644 --- a/src/test/java/redis/clients/jedis/tests/JedisSentinelPoolTest.java +++ b/src/test/java/redis/clients/jedis/tests/JedisSentinelPoolTest.java @@ -2,97 +2,173 @@ package redis.clients.jedis.tests; import java.util.HashSet; import java.util.Set; +import java.util.concurrent.atomic.AtomicReference; -import org.apache.commons.pool.impl.GenericObjectPool.Config; +import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import org.junit.Before; import org.junit.Test; import redis.clients.jedis.DebugParams; +import redis.clients.jedis.HostAndPort; import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPubSub; import redis.clients.jedis.JedisSentinelPool; -import redis.clients.jedis.tests.HostAndPortUtil.HostAndPort; +import redis.clients.jedis.Transaction; public class JedisSentinelPoolTest extends JedisTestBase { + private static final String MASTER_NAME = "mymaster"; protected static HostAndPort master = HostAndPortUtil.getRedisServers() .get(2); protected static HostAndPort slave1 = HostAndPortUtil.getRedisServers() .get(3); protected static HostAndPort slave2 = HostAndPortUtil.getRedisServers() - .get(4); + .get(4); protected static HostAndPort sentinel1 = HostAndPortUtil .getSentinelServers().get(1); protected static HostAndPort sentinel2 = HostAndPortUtil .getSentinelServers().get(2); - protected static Jedis masterJedis; - protected static Jedis slaveJedis1; - protected static Jedis slaveJedis2; - - protected static int slaveCount = 0; + protected static Jedis sentinelJedis1; protected Set sentinels = new HashSet(); @Before public void setUp() throws Exception { - - // set up master and slaves - masterJedis = new Jedis(master.host, master.port); - masterJedis.auth("foobared"); - masterJedis.slaveofNoOne(); - - slaveJedis1 = new Jedis(slave1.host, slave1.port); - slaveJedis1.auth("foobared"); - slaveJedis1.slaveof(master.host, master.port); - slaveCount++; - - slaveJedis2 = new Jedis(slave2.host, slave2.port); - slaveJedis2.auth("foobared"); - slaveJedis2.slaveof(master.host, master.port); - slaveCount++; - sentinels.add(sentinel1.toString()); sentinels.add(sentinel2.toString()); - // FIXME: The following allows the master/slave relationship to - // be established, and let sentinels know about this relationship. - // We can do this more elegantly. - Thread.sleep(10000); + sentinelJedis1 = new Jedis(sentinel1.getHost(), sentinel1.getPort()); } @Test public void ensureSafeTwiceFailover() throws InterruptedException { - JedisSentinelPool pool = new JedisSentinelPool("mymaster", sentinels, - new Config(), 1000, "foobared", 2); - - // perform failover - doSegFaultMaster(pool); - - // perform failover once again - doSegFaultMaster(pool); - - // you can test failover as much as possible - // but you need to prepare additional slave per failover + JedisSentinelPool pool = new JedisSentinelPool(MASTER_NAME, sentinels, + new GenericObjectPoolConfig(), 1000, "foobared", 2); + + // perform failover + doSegFaultMaster(pool); + + // perform failover once again + doSegFaultMaster(pool); + + // you can test failover as much as possible + // but you need to prepare additional slave per failover } - - private void doSegFaultMaster(JedisSentinelPool pool) throws InterruptedException { - // jedis connection should be master - Jedis jedis = pool.getResource(); - assertEquals("PONG", jedis.ping()); - try { - jedis.debug(DebugParams.SEGFAULT()); - } catch (Exception e) { - } + private void doSegFaultMaster(JedisSentinelPool pool) + throws InterruptedException { + HostAndPort oldMaster = pool.getCurrentHostMaster(); - // wait for the sentinel to promote a master - // FIXME: we can query the sentinel and sleep - // right until the master is promoted - Thread.sleep(35000); + // jedis connection should be master + Jedis jedis = pool.getResource(); + assertEquals("PONG", jedis.ping()); - jedis = pool.getResource(); - assertEquals("PONG", jedis.ping()); - assertEquals("foobared", jedis.configGet("requirepass").get(1)); - assertEquals(2, jedis.getDB().intValue()); + try { + jedis.debug(DebugParams.SEGFAULT()); + } catch (Exception e) { + } + + waitForFailover(pool, oldMaster); + Thread.sleep(100); + + jedis = pool.getResource(); + assertEquals("PONG", jedis.ping()); + assertEquals("foobared", jedis.configGet("requirepass").get(1)); + assertEquals(2, jedis.getDB().intValue()); + } + + private void waitForFailover(JedisSentinelPool pool, HostAndPort oldMaster) + throws InterruptedException { + waitForJedisSentinelPoolRecognizeNewMaster(pool); + } + + private void waitForJedisSentinelPoolRecognizeNewMaster( + JedisSentinelPool pool) throws InterruptedException { + + final AtomicReference newmaster = new AtomicReference( + ""); + + sentinelJedis1.psubscribe(new JedisPubSub() { + + @Override + public void onMessage(String channel, String message) { + // TODO Auto-generated method stub + + } + + @Override + public void onPMessage(String pattern, String channel, + String message) { + if (channel.equals("+switch-master")) { + newmaster.set(message); + punsubscribe(); + } + // TODO Auto-generated method stub + + } + + @Override + public void onSubscribe(String channel, int subscribedChannels) { + // TODO Auto-generated method stub + + } + + @Override + public void onUnsubscribe(String channel, int subscribedChannels) { + // TODO Auto-generated method stub + + } + + @Override + public void onPUnsubscribe(String pattern, int subscribedChannels) { + // TODO Auto-generated method stub + + } + + @Override + public void onPSubscribe(String pattern, int subscribedChannels) { + // TODO Auto-generated method stub + + } + }, "*"); + + String[] chunks = newmaster.get().split(" "); + HostAndPort newMaster = new HostAndPort(chunks[3], + Integer.parseInt(chunks[4])); + + while (true) { + String host = pool.getCurrentHostMaster().getHost(); + int port = pool.getCurrentHostMaster().getPort(); + + if (host.equals(newMaster.getHost()) && port == newMaster.getPort()) + break; + + System.out + .println("JedisSentinelPool's master is not yet changed, sleep..."); + + Thread.sleep(100); + } + } + + @Test + public void returnResourceShouldResetState() { + GenericObjectPoolConfig config = new GenericObjectPoolConfig(); + config.setMaxTotal(1); + config.setBlockWhenExhausted(false); + JedisSentinelPool pool = new JedisSentinelPool(MASTER_NAME, sentinels, + config, 1000, "foobared", 2); + + Jedis jedis = pool.getResource(); + jedis.set("hello", "jedis"); + Transaction t = jedis.multi(); + t.set("hello", "world"); + pool.returnResource(jedis); + + Jedis jedis2 = pool.getResource(); + assertTrue(jedis == jedis2); + assertEquals("jedis", jedis2.get("hello")); + pool.returnResource(jedis2); + pool.destroy(); } } diff --git a/src/test/java/redis/clients/jedis/tests/JedisSentinelTest.java b/src/test/java/redis/clients/jedis/tests/JedisSentinelTest.java index 868527f..f8267c8 100644 --- a/src/test/java/redis/clients/jedis/tests/JedisSentinelTest.java +++ b/src/test/java/redis/clients/jedis/tests/JedisSentinelTest.java @@ -1,9 +1,5 @@ package redis.clients.jedis.tests; -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertFalse; -import static junit.framework.Assert.assertTrue; - import java.util.List; import java.util.Map; @@ -11,33 +7,40 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; +import redis.clients.jedis.HostAndPort; import redis.clients.jedis.Jedis; -public class JedisSentinelTest { +public class JedisSentinelTest extends JedisTestBase { private static final String MASTER_NAME = "mymaster"; + protected static HostAndPort master = HostAndPortUtil.getRedisServers() + .get(0); + protected static HostAndPort slave = HostAndPortUtil.getRedisServers().get( + 5); + protected static HostAndPort sentinel = HostAndPortUtil + .getSentinelServers().get(0); + + protected static Jedis masterJedis; + protected static Jedis slaveJedis; + protected static Jedis sentinelJedis; + @Before public void setup() throws InterruptedException { - Jedis j = new Jedis("localhost", 6380); - j.auth("foobared"); - j.configSet("masterauth", "foobared"); - j.slaveof("localhost", 6379); - // TODO: The sleep is to give time to the slave to synchronize with the - // master and also let know the sentinels about this new topology. We - // should find a better way to do this. - Thread.sleep(10000); + } @After - public void clear() { - Jedis j = new Jedis("localhost", 6380); - j.auth("foobared"); - j.slaveofNoOne(); + public void clear() throws InterruptedException { + // New Sentinel (after 2.8.1) + // when slave promoted to master (slave of no one), New Sentinel force + // to restore it (demote) + // so, promote(slaveof) slave to master has no effect, not same to old + // Sentinel's behavior } @Test public void sentinel() { - Jedis j = new Jedis("localhost", 26379); + Jedis j = new Jedis(sentinel.getHost(), sentinel.getPort()); List> masters = j.sentinelMasters(); final String masterName = masters.get(0).get("name"); @@ -45,25 +48,18 @@ public class JedisSentinelTest { List masterHostAndPort = j .sentinelGetMasterAddrByName(masterName); - assertEquals("127.0.0.1", masterHostAndPort.get(0)); - assertEquals("6379", masterHostAndPort.get(1)); + HostAndPort masterFromSentinel = new HostAndPort( + masterHostAndPort.get(0), Integer.parseInt(masterHostAndPort + .get(1))); + assertEquals(master, masterFromSentinel); List> slaves = j.sentinelSlaves(masterName); assertTrue(slaves.size() > 0); - assertEquals("6379", slaves.get(0).get("master-port")); - - List isMasterDownByAddr = j - .sentinelIsMasterDownByAddr("127.0.0.1", 6379); - assertEquals(Long.valueOf(0), (Long) isMasterDownByAddr.get(0)); - assertFalse("?".equals(isMasterDownByAddr.get(1))); - - isMasterDownByAddr = j.sentinelIsMasterDownByAddr("127.0.0.1", 1); - assertEquals(Long.valueOf(0), (Long) isMasterDownByAddr.get(0)); - assertTrue("?".equals(isMasterDownByAddr.get(1))); + assertEquals(master.getPort(), + Integer.parseInt(slaves.get(0).get("master-port"))); // DO NOT RE-RUN TEST TOO FAST, RESET TAKES SOME TIME TO... RESET assertEquals(Long.valueOf(1), j.sentinelReset(masterName)); assertEquals(Long.valueOf(0), j.sentinelReset("woof" + masterName)); - } } diff --git a/src/test/java/redis/clients/jedis/tests/JedisTest.java b/src/test/java/redis/clients/jedis/tests/JedisTest.java index bfa71ea..b123b05 100644 --- a/src/test/java/redis/clients/jedis/tests/JedisTest.java +++ b/src/test/java/redis/clients/jedis/tests/JedisTest.java @@ -52,9 +52,7 @@ public class JedisTest extends JedisCommandTestBase { jedis = new Jedis("localhost", 6379, 15000); jedis.auth("foobared"); jedis.configSet("timeout", "1"); - // we need to sleep a long time since redis check for idle connections - // every 10 seconds or so - Thread.sleep(20000); + Thread.sleep(2000); jedis.hmget("foobar", "foo"); } diff --git a/src/test/java/redis/clients/jedis/tests/JedisTestBase.java b/src/test/java/redis/clients/jedis/tests/JedisTestBase.java index 74ce5bd..158e20c 100644 --- a/src/test/java/redis/clients/jedis/tests/JedisTestBase.java +++ b/src/test/java/redis/clients/jedis/tests/JedisTestBase.java @@ -8,18 +8,18 @@ import org.junit.Assert; public abstract class JedisTestBase extends Assert { protected void assertEquals(List expected, List actual) { - assertEquals(expected.size(), actual.size()); - for (int n = 0; n < expected.size(); n++) { - assertArrayEquals(expected.get(n), actual.get(n)); - } + assertEquals(expected.size(), actual.size()); + for (int n = 0; n < expected.size(); n++) { + assertArrayEquals(expected.get(n), actual.get(n)); + } } protected void assertEquals(Set expected, Set actual) { - assertEquals(expected.size(), actual.size()); - Iterator iterator = expected.iterator(); - Iterator iterator2 = actual.iterator(); - while (iterator.hasNext() || iterator2.hasNext()) { - assertArrayEquals(iterator.next(), iterator2.next()); - } + assertEquals(expected.size(), actual.size()); + Iterator iterator = expected.iterator(); + Iterator iterator2 = actual.iterator(); + while (iterator.hasNext() || iterator2.hasNext()) { + assertArrayEquals(iterator.next(), iterator2.next()); + } } } \ No newline at end of file diff --git a/src/test/java/redis/clients/jedis/tests/PipeliningTest.java b/src/test/java/redis/clients/jedis/tests/PipeliningTest.java index c5ab782..2b3eabe 100755 --- a/src/test/java/redis/clients/jedis/tests/PipeliningTest.java +++ b/src/test/java/redis/clients/jedis/tests/PipeliningTest.java @@ -1,14 +1,24 @@ package redis.clients.jedis.tests; +import java.io.UnsupportedEncodingException; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; + import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import redis.clients.jedis.*; -import redis.clients.jedis.exceptions.JedisDataException; -import redis.clients.jedis.tests.HostAndPortUtil.HostAndPort; -import java.io.UnsupportedEncodingException; -import java.util.*; +import redis.clients.jedis.HostAndPort; +import redis.clients.jedis.Jedis; +import redis.clients.jedis.Pipeline; +import redis.clients.jedis.PipelineBlock; +import redis.clients.jedis.Response; +import redis.clients.jedis.Tuple; +import redis.clients.jedis.exceptions.JedisDataException; public class PipeliningTest extends Assert { private static HostAndPort hnp = HostAndPortUtil.getRedisServers().get(0); @@ -17,307 +27,321 @@ public class PipeliningTest extends Assert { @Before public void setUp() throws Exception { - jedis = new Jedis(hnp.host, hnp.port, 500); - jedis.connect(); - jedis.auth("foobared"); - jedis.flushAll(); + jedis = new Jedis(hnp.getHost(), hnp.getPort(), 500); + jedis.connect(); + jedis.auth("foobared"); + jedis.flushAll(); } @Test public void pipeline() throws UnsupportedEncodingException { - List results = jedis.pipelined(new PipelineBlock() { - public void execute() { - set("foo", "bar"); - get("foo"); - } - }); + List results = jedis.pipelined(new PipelineBlock() { + public void execute() { + set("foo", "bar"); + get("foo"); + } + }); - assertEquals(2, results.size()); - assertEquals("OK", results.get(0)); - assertEquals("bar", results.get(1)); + assertEquals(2, results.size()); + assertEquals("OK", results.get(0)); + assertEquals("bar", results.get(1)); - Pipeline p = jedis.pipelined(); - p.set("foo", "bar"); - p.get("foo"); - results = p.syncAndReturnAll(); + Pipeline p = jedis.pipelined(); + p.set("foo", "bar"); + p.get("foo"); + results = p.syncAndReturnAll(); - assertEquals(2, results.size()); - assertEquals("OK", results.get(0)); - assertEquals("bar", results.get(1)); + assertEquals(2, results.size()); + assertEquals("OK", results.get(0)); + assertEquals("bar", results.get(1)); } @Test public void pipelineResponse() { - jedis.set("string", "foo"); - jedis.lpush("list", "foo"); - jedis.hset("hash", "foo", "bar"); - jedis.zadd("zset", 1, "foo"); - jedis.sadd("set", "foo"); + jedis.set("string", "foo"); + jedis.lpush("list", "foo"); + jedis.hset("hash", "foo", "bar"); + jedis.zadd("zset", 1, "foo"); + jedis.sadd("set", "foo"); - Pipeline p = jedis.pipelined(); - Response string = p.get("string"); - Response list = p.lpop("list"); - Response hash = p.hget("hash", "foo"); - Response> zset = p.zrange("zset", 0, -1); - Response set = p.spop("set"); - Response blist = p.exists("list"); - Response zincrby = p.zincrby("zset", 1, "foo"); - Response zcard = p.zcard("zset"); - p.lpush("list", "bar"); - Response> lrange = p.lrange("list", 0, -1); - Response> hgetAll = p.hgetAll("hash"); - p.sadd("set", "foo"); - Response> smembers = p.smembers("set"); - Response> zrangeWithScores = p.zrangeWithScores("zset", 0, - -1); - p.sync(); + Pipeline p = jedis.pipelined(); + Response string = p.get("string"); + Response list = p.lpop("list"); + Response hash = p.hget("hash", "foo"); + Response> zset = p.zrange("zset", 0, -1); + Response set = p.spop("set"); + Response blist = p.exists("list"); + Response zincrby = p.zincrby("zset", 1, "foo"); + Response zcard = p.zcard("zset"); + p.lpush("list", "bar"); + Response> lrange = p.lrange("list", 0, -1); + Response> hgetAll = p.hgetAll("hash"); + p.sadd("set", "foo"); + Response> smembers = p.smembers("set"); + Response> zrangeWithScores = p.zrangeWithScores("zset", 0, + -1); + p.sync(); - assertEquals("foo", string.get()); - assertEquals("foo", list.get()); - assertEquals("bar", hash.get()); - assertEquals("foo", zset.get().iterator().next()); - assertEquals("foo", set.get()); - assertEquals(false, blist.get()); - assertEquals(Double.valueOf(2), zincrby.get()); - assertEquals(Long.valueOf(1), zcard.get()); - assertEquals(1, lrange.get().size()); - assertNotNull(hgetAll.get().get("foo")); - assertEquals(1, smembers.get().size()); - assertEquals(1, zrangeWithScores.get().size()); + assertEquals("foo", string.get()); + assertEquals("foo", list.get()); + assertEquals("bar", hash.get()); + assertEquals("foo", zset.get().iterator().next()); + assertEquals("foo", set.get()); + assertEquals(false, blist.get()); + assertEquals(Double.valueOf(2), zincrby.get()); + assertEquals(Long.valueOf(1), zcard.get()); + assertEquals(1, lrange.get().size()); + assertNotNull(hgetAll.get().get("foo")); + assertEquals(1, smembers.get().size()); + assertEquals(1, zrangeWithScores.get().size()); } - + @Test public void pipelineResponseWithData() { - jedis.zadd("zset", 1, "foo"); - - Pipeline p = jedis.pipelined(); - Response score = p.zscore("zset", "foo"); - p.sync(); + jedis.zadd("zset", 1, "foo"); - assertNotNull(score.get()); + Pipeline p = jedis.pipelined(); + Response score = p.zscore("zset", "foo"); + p.sync(); + + assertNotNull(score.get()); } @Test public void pipelineBinarySafeHashCommands() { - jedis.hset("key".getBytes(), "f1".getBytes(), "v111".getBytes()); - jedis.hset("key".getBytes(), "f22".getBytes(), "v2222".getBytes()); + jedis.hset("key".getBytes(), "f1".getBytes(), "v111".getBytes()); + jedis.hset("key".getBytes(), "f22".getBytes(), "v2222".getBytes()); - Pipeline p = jedis.pipelined(); - Response> fmap = p.hgetAll("key".getBytes()); - Response> fkeys = p.hkeys("key".getBytes()); - Response> fordered = p.hmget("key".getBytes(), "f22".getBytes(), "f1".getBytes()); - Response> fvals = p.hvals("key".getBytes()); - p.sync(); + Pipeline p = jedis.pipelined(); + Response> fmap = p.hgetAll("key".getBytes()); + Response> fkeys = p.hkeys("key".getBytes()); + Response> fordered = p.hmget("key".getBytes(), + "f22".getBytes(), "f1".getBytes()); + Response> fvals = p.hvals("key".getBytes()); + p.sync(); - assertNotNull(fmap.get()); - // we have to do these strange contortions because byte[] is not a very good key - // for a java Map. It only works with equality (you need the exact key object to retrieve - // the value) I recommend we switch to using ByteBuffer or something similar: - // http://stackoverflow.com/questions/1058149/using-a-byte-array-as-hashmap-key-java - Map map = fmap.get(); - Set mapKeys = map.keySet(); - Iterator iterMap = mapKeys.iterator(); - byte[] firstMapKey = iterMap.next(); - byte[] secondMapKey = iterMap.next(); - assertFalse(iterMap.hasNext()); - verifyHasBothValues(firstMapKey, secondMapKey, "f1".getBytes(), "f22".getBytes()); - byte[] firstMapValue = map.get(firstMapKey); - byte[] secondMapValue = map.get(secondMapKey); - verifyHasBothValues(firstMapValue, secondMapValue, "v111".getBytes(), "v2222".getBytes()); + assertNotNull(fmap.get()); + // we have to do these strange contortions because byte[] is not a very + // good key + // for a java Map. It only works with equality (you need the exact key + // object to retrieve + // the value) I recommend we switch to using ByteBuffer or something + // similar: + // http://stackoverflow.com/questions/1058149/using-a-byte-array-as-hashmap-key-java + Map map = fmap.get(); + Set mapKeys = map.keySet(); + Iterator iterMap = mapKeys.iterator(); + byte[] firstMapKey = iterMap.next(); + byte[] secondMapKey = iterMap.next(); + assertFalse(iterMap.hasNext()); + verifyHasBothValues(firstMapKey, secondMapKey, "f1".getBytes(), + "f22".getBytes()); + byte[] firstMapValue = map.get(firstMapKey); + byte[] secondMapValue = map.get(secondMapKey); + verifyHasBothValues(firstMapValue, secondMapValue, "v111".getBytes(), + "v2222".getBytes()); - assertNotNull(fkeys.get()); - Iterator iter = fkeys.get().iterator(); - byte[] firstKey = iter.next(); - byte[] secondKey = iter.next(); - assertFalse(iter.hasNext()); - verifyHasBothValues(firstKey, secondKey, "f1".getBytes(), "f22".getBytes()); + assertNotNull(fkeys.get()); + Iterator iter = fkeys.get().iterator(); + byte[] firstKey = iter.next(); + byte[] secondKey = iter.next(); + assertFalse(iter.hasNext()); + verifyHasBothValues(firstKey, secondKey, "f1".getBytes(), + "f22".getBytes()); - assertNotNull(fordered.get()); - assertArrayEquals("v2222".getBytes(), fordered.get().get(0)); - assertArrayEquals("v111".getBytes(), fordered.get().get(1)); + assertNotNull(fordered.get()); + assertArrayEquals("v2222".getBytes(), fordered.get().get(0)); + assertArrayEquals("v111".getBytes(), fordered.get().get(1)); - assertNotNull(fvals.get()); - assertEquals(2, fvals.get().size()); - byte[] firstValue = fvals.get().get(0); - byte[] secondValue = fvals.get().get(1); - verifyHasBothValues(firstValue, secondValue, "v111".getBytes(), "v2222".getBytes()); + assertNotNull(fvals.get()); + assertEquals(2, fvals.get().size()); + byte[] firstValue = fvals.get().get(0); + byte[] secondValue = fvals.get().get(1); + verifyHasBothValues(firstValue, secondValue, "v111".getBytes(), + "v2222".getBytes()); } - private void verifyHasBothValues(byte[] firstKey, byte[] secondKey, byte[] value1, byte[] value2) { - assertFalse(Arrays.equals(firstKey, secondKey)); - assertTrue(Arrays.equals(firstKey, value1) || Arrays.equals(firstKey, value2)); - assertTrue(Arrays.equals(secondKey, value1) || Arrays.equals(secondKey, value2)); + private void verifyHasBothValues(byte[] firstKey, byte[] secondKey, + byte[] value1, byte[] value2) { + assertFalse(Arrays.equals(firstKey, secondKey)); + assertTrue(Arrays.equals(firstKey, value1) + || Arrays.equals(firstKey, value2)); + assertTrue(Arrays.equals(secondKey, value1) + || Arrays.equals(secondKey, value2)); } @Test public void pipelineSelect() { - Pipeline p = jedis.pipelined(); - p.select(1); - p.sync(); + Pipeline p = jedis.pipelined(); + p.select(1); + p.sync(); } - + @Test public void pipelineResponseWithoutData() { - jedis.zadd("zset", 1, "foo"); - - Pipeline p = jedis.pipelined(); - Response score = p.zscore("zset", "bar"); - p.sync(); + jedis.zadd("zset", 1, "foo"); - assertNull(score.get()); + Pipeline p = jedis.pipelined(); + Response score = p.zscore("zset", "bar"); + p.sync(); + + assertNull(score.get()); } - @Test(expected = JedisDataException.class) public void pipelineResponseWithinPipeline() { - jedis.set("string", "foo"); + jedis.set("string", "foo"); - Pipeline p = jedis.pipelined(); - Response string = p.get("string"); - string.get(); - p.sync(); + Pipeline p = jedis.pipelined(); + Response string = p.get("string"); + string.get(); + p.sync(); } @Test public void pipelineWithPubSub() { - Pipeline pipelined = jedis.pipelined(); - Response p1 = pipelined.publish("foo", "bar"); - Response p2 = pipelined.publish("foo".getBytes(), "bar" - .getBytes()); - pipelined.sync(); - assertEquals(0, p1.get().longValue()); - assertEquals(0, p2.get().longValue()); + Pipeline pipelined = jedis.pipelined(); + Response p1 = pipelined.publish("foo", "bar"); + Response p2 = pipelined.publish("foo".getBytes(), + "bar".getBytes()); + pipelined.sync(); + assertEquals(0, p1.get().longValue()); + assertEquals(0, p2.get().longValue()); } @Test public void canRetrieveUnsetKey() { - Pipeline p = jedis.pipelined(); - Response shouldNotExist = p.get(UUID.randomUUID().toString()); - p.sync(); - assertNull(shouldNotExist.get()); - } - - @Test - public void piplineWithError(){ - Pipeline p = jedis.pipelined(); - p.set("foo", "bar"); - Response> error = p.smembers("foo"); - Response r = p.get("foo"); - p.sync(); - try{ - error.get(); - fail(); - }catch(JedisDataException e){ - //that is fine we should be here - } - assertEquals(r.get(), "bar"); + Pipeline p = jedis.pipelined(); + Response shouldNotExist = p.get(UUID.randomUUID().toString()); + p.sync(); + assertNull(shouldNotExist.get()); } @Test - public void multi(){ - Pipeline p = jedis.pipelined(); - p.multi(); - Response r1 = p.hincrBy("a", "f1", -1); - Response r2 = p.hincrBy("a", "f1", -2); - Response> r3 = p.exec(); - List result = p.syncAndReturnAll(); - - assertEquals(new Long(-1), r1.get()); - assertEquals(new Long(-3), r2.get()); - - assertEquals(4, result.size()); - - assertEquals("OK", result.get(0)); - assertEquals("QUEUED", result.get(1)); - assertEquals("QUEUED", result.get(2)); - - //4th result is a list with the results from the multi - @SuppressWarnings("unchecked") - List multiResult = (List) result.get(3); - assertEquals(new Long(-1), multiResult.get(0)); - assertEquals(new Long(-3), multiResult.get(1)); - - assertEquals(new Long(-1), r3.get().get(0)); - assertEquals(new Long(-3), r3.get().get(1)); + public void piplineWithError() { + Pipeline p = jedis.pipelined(); + p.set("foo", "bar"); + Response> error = p.smembers("foo"); + Response r = p.get("foo"); + p.sync(); + try { + error.get(); + fail(); + } catch (JedisDataException e) { + // that is fine we should be here + } + assertEquals(r.get(), "bar"); + } + + @Test + public void multi() { + Pipeline p = jedis.pipelined(); + p.multi(); + Response r1 = p.hincrBy("a", "f1", -1); + Response r2 = p.hincrBy("a", "f1", -2); + Response> r3 = p.exec(); + List result = p.syncAndReturnAll(); + + assertEquals(new Long(-1), r1.get()); + assertEquals(new Long(-3), r2.get()); + + assertEquals(4, result.size()); + + assertEquals("OK", result.get(0)); + assertEquals("QUEUED", result.get(1)); + assertEquals("QUEUED", result.get(2)); + + // 4th result is a list with the results from the multi + @SuppressWarnings("unchecked") + List multiResult = (List) result.get(3); + assertEquals(new Long(-1), multiResult.get(0)); + assertEquals(new Long(-3), multiResult.get(1)); + + assertEquals(new Long(-1), r3.get().get(0)); + assertEquals(new Long(-3), r3.get().get(1)); } @Test public void testDiscardInPipeline() { - Pipeline pipeline = jedis.pipelined(); - pipeline.multi(); - pipeline.set("foo", "bar"); - Response discard = pipeline.discard(); - Response get = pipeline.get("foo"); - pipeline.sync(); - discard.get(); - get.get(); + Pipeline pipeline = jedis.pipelined(); + pipeline.multi(); + pipeline.set("foo", "bar"); + Response discard = pipeline.discard(); + Response get = pipeline.get("foo"); + pipeline.sync(); + discard.get(); + get.get(); } - - @Test - public void testEval() { - String script = "return 'success!'"; - Pipeline p = jedis.pipelined(); - Response result = p.eval(script); - p.sync(); + @Test + public void testEval() { + String script = "return 'success!'"; - assertEquals("success!", result.get()); - } + Pipeline p = jedis.pipelined(); + Response result = p.eval(script); + p.sync(); - @Test - public void testEvalKeyAndArg() { - String key = "test"; - String arg = "3"; - String script = "redis.call('INCRBY', KEYS[1], ARGV[1]) redis.call('INCRBY', KEYS[1], ARGV[1])"; + assertEquals("success!", result.get()); + } - Pipeline p = jedis.pipelined(); - p.set(key, "0"); - Response result0 = p.eval(script, Arrays.asList(key), Arrays.asList(arg)); - p.incr(key); - Response result1 = p.eval(script, Arrays.asList(key), Arrays.asList(arg)); - Response result2 = p.get(key); - p.sync(); + @Test + public void testEvalKeyAndArg() { + String key = "test"; + String arg = "3"; + String script = "redis.call('INCRBY', KEYS[1], ARGV[1]) redis.call('INCRBY', KEYS[1], ARGV[1])"; - assertNull(result0.get()); - assertNull(result1.get()); - assertEquals("13", result2.get()); - } + Pipeline p = jedis.pipelined(); + p.set(key, "0"); + Response result0 = p.eval(script, Arrays.asList(key), + Arrays.asList(arg)); + p.incr(key); + Response result1 = p.eval(script, Arrays.asList(key), + Arrays.asList(arg)); + Response result2 = p.get(key); + p.sync(); - @Test - public void testEvalsha() { - String script = "return 'success!'"; - String sha1 = jedis.scriptLoad(script); + assertNull(result0.get()); + assertNull(result1.get()); + assertEquals("13", result2.get()); + } - assertTrue(jedis.scriptExists(sha1)); + @Test + public void testEvalsha() { + String script = "return 'success!'"; + String sha1 = jedis.scriptLoad(script); - Pipeline p = jedis.pipelined(); - Response result = p.evalsha(sha1); - p.sync(); + assertTrue(jedis.scriptExists(sha1)); - assertEquals("success!", result.get()); - } + Pipeline p = jedis.pipelined(); + Response result = p.evalsha(sha1); + p.sync(); - @Test - public void testEvalshaKeyAndArg() { - String key = "test"; - String arg = "3"; - String script = "redis.call('INCRBY', KEYS[1], ARGV[1]) redis.call('INCRBY', KEYS[1], ARGV[1])"; - String sha1 = jedis.scriptLoad(script); + assertEquals("success!", result.get()); + } - assertTrue(jedis.scriptExists(sha1)); + @Test + public void testEvalshaKeyAndArg() { + String key = "test"; + String arg = "3"; + String script = "redis.call('INCRBY', KEYS[1], ARGV[1]) redis.call('INCRBY', KEYS[1], ARGV[1])"; + String sha1 = jedis.scriptLoad(script); - Pipeline p = jedis.pipelined(); - p.set(key, "0"); - Response result0 = p.evalsha(sha1, Arrays.asList(key), Arrays.asList(arg)); - p.incr(key); - Response result1 = p.evalsha(sha1, Arrays.asList(key), Arrays.asList(arg)); - Response result2 = p.get(key); - p.sync(); + assertTrue(jedis.scriptExists(sha1)); - assertNull(result0.get()); - assertNull(result1.get()); - assertEquals("13", result2.get()); - } + Pipeline p = jedis.pipelined(); + p.set(key, "0"); + Response result0 = p.evalsha(sha1, Arrays.asList(key), + Arrays.asList(arg)); + p.incr(key); + Response result1 = p.evalsha(sha1, Arrays.asList(key), + Arrays.asList(arg)); + Response result2 = p.get(key); + p.sync(); + + assertNull(result0.get()); + assertNull(result1.get()); + assertEquals("13", result2.get()); + } } diff --git a/src/test/java/redis/clients/jedis/tests/ProtocolTest.java b/src/test/java/redis/clients/jedis/tests/ProtocolTest.java index 60b82aa..504a66a 100644 --- a/src/test/java/redis/clients/jedis/tests/ProtocolTest.java +++ b/src/test/java/redis/clients/jedis/tests/ProtocolTest.java @@ -19,86 +19,86 @@ import redis.clients.util.SafeEncoder; public class ProtocolTest extends JedisTestBase { @Test public void buildACommand() throws IOException { - PipedInputStream pis = new PipedInputStream(); - BufferedInputStream bis = new BufferedInputStream(pis); - PipedOutputStream pos = new PipedOutputStream(pis); - RedisOutputStream ros = new RedisOutputStream(pos); + PipedInputStream pis = new PipedInputStream(); + BufferedInputStream bis = new BufferedInputStream(pis); + PipedOutputStream pos = new PipedOutputStream(pis); + RedisOutputStream ros = new RedisOutputStream(pos); - Protocol.sendCommand(ros, Protocol.Command.GET, - "SOMEKEY".getBytes(Protocol.CHARSET)); - ros.flush(); - pos.close(); - String expectedCommand = "*2\r\n$3\r\nGET\r\n$7\r\nSOMEKEY\r\n"; + Protocol.sendCommand(ros, Protocol.Command.GET, + "SOMEKEY".getBytes(Protocol.CHARSET)); + ros.flush(); + pos.close(); + String expectedCommand = "*2\r\n$3\r\nGET\r\n$7\r\nSOMEKEY\r\n"; - int b; - StringBuilder sb = new StringBuilder(); - while ((b = bis.read()) != -1) { - sb.append((char) b); - } + int b; + StringBuilder sb = new StringBuilder(); + while ((b = bis.read()) != -1) { + sb.append((char) b); + } - assertEquals(expectedCommand, sb.toString()); + assertEquals(expectedCommand, sb.toString()); } @Test public void bulkReply() { - InputStream is = new ByteArrayInputStream("$6\r\nfoobar\r\n".getBytes()); - byte[] response = (byte[]) Protocol.read(new RedisInputStream(is)); - assertArrayEquals(SafeEncoder.encode("foobar"), response); + InputStream is = new ByteArrayInputStream("$6\r\nfoobar\r\n".getBytes()); + byte[] response = (byte[]) Protocol.read(new RedisInputStream(is)); + assertArrayEquals(SafeEncoder.encode("foobar"), response); } @Test public void fragmentedBulkReply() { - FragmentedByteArrayInputStream fis = new FragmentedByteArrayInputStream( - "$30\r\n012345678901234567890123456789\r\n".getBytes()); - byte[] response = (byte[]) Protocol.read(new RedisInputStream(fis)); - assertArrayEquals(SafeEncoder.encode("012345678901234567890123456789"), - response); + FragmentedByteArrayInputStream fis = new FragmentedByteArrayInputStream( + "$30\r\n012345678901234567890123456789\r\n".getBytes()); + byte[] response = (byte[]) Protocol.read(new RedisInputStream(fis)); + assertArrayEquals(SafeEncoder.encode("012345678901234567890123456789"), + response); } @Test public void nullBulkReply() { - InputStream is = new ByteArrayInputStream("$-1\r\n".getBytes()); - String response = (String) Protocol.read(new RedisInputStream(is)); - assertEquals(null, response); + InputStream is = new ByteArrayInputStream("$-1\r\n".getBytes()); + String response = (String) Protocol.read(new RedisInputStream(is)); + assertEquals(null, response); } @Test public void singleLineReply() { - InputStream is = new ByteArrayInputStream("+OK\r\n".getBytes()); - byte[] response = (byte[]) Protocol.read(new RedisInputStream(is)); - assertArrayEquals(SafeEncoder.encode("OK"), response); + InputStream is = new ByteArrayInputStream("+OK\r\n".getBytes()); + byte[] response = (byte[]) Protocol.read(new RedisInputStream(is)); + assertArrayEquals(SafeEncoder.encode("OK"), response); } @Test public void integerReply() { - InputStream is = new ByteArrayInputStream(":123\r\n".getBytes()); - long response = (Long) Protocol.read(new RedisInputStream(is)); - assertEquals(123, response); + InputStream is = new ByteArrayInputStream(":123\r\n".getBytes()); + long response = (Long) Protocol.read(new RedisInputStream(is)); + assertEquals(123, response); } @SuppressWarnings("unchecked") @Test public void multiBulkReply() { - InputStream is = new ByteArrayInputStream( - "*4\r\n$3\r\nfoo\r\n$3\r\nbar\r\n$5\r\nHello\r\n$5\r\nWorld\r\n" - .getBytes()); - List response = (List) Protocol - .read(new RedisInputStream(is)); - List expected = new ArrayList(); - expected.add(SafeEncoder.encode("foo")); - expected.add(SafeEncoder.encode("bar")); - expected.add(SafeEncoder.encode("Hello")); - expected.add(SafeEncoder.encode("World")); + InputStream is = new ByteArrayInputStream( + "*4\r\n$3\r\nfoo\r\n$3\r\nbar\r\n$5\r\nHello\r\n$5\r\nWorld\r\n" + .getBytes()); + List response = (List) Protocol + .read(new RedisInputStream(is)); + List expected = new ArrayList(); + expected.add(SafeEncoder.encode("foo")); + expected.add(SafeEncoder.encode("bar")); + expected.add(SafeEncoder.encode("Hello")); + expected.add(SafeEncoder.encode("World")); - assertEquals(expected, response); + assertEquals(expected, response); } @SuppressWarnings("unchecked") @Test public void nullMultiBulkReply() { - InputStream is = new ByteArrayInputStream("*-1\r\n".getBytes()); - List response = (List) Protocol - .read(new RedisInputStream(is)); - assertNull(response); + InputStream is = new ByteArrayInputStream("*-1\r\n".getBytes()); + List response = (List) Protocol + .read(new RedisInputStream(is)); + assertNull(response); } } \ No newline at end of file diff --git a/src/test/java/redis/clients/jedis/tests/ShardedJedisPipelineTest.java b/src/test/java/redis/clients/jedis/tests/ShardedJedisPipelineTest.java index 7574f08..bf9b2bd 100644 --- a/src/test/java/redis/clients/jedis/tests/ShardedJedisPipelineTest.java +++ b/src/test/java/redis/clients/jedis/tests/ShardedJedisPipelineTest.java @@ -1,9 +1,9 @@ package redis.clients.jedis.tests; -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertNull; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import java.io.UnsupportedEncodingException; import java.util.ArrayList; @@ -15,6 +15,7 @@ import java.util.UUID; import org.junit.Before; import org.junit.Test; +import redis.clients.jedis.HostAndPort; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisShardInfo; import redis.clients.jedis.Response; @@ -24,105 +25,109 @@ import redis.clients.jedis.Tuple; import redis.clients.jedis.exceptions.JedisDataException; public class ShardedJedisPipelineTest { - private static HostAndPortUtil.HostAndPort redis1 = HostAndPortUtil - .getRedisServers().get(0); - private static HostAndPortUtil.HostAndPort redis2 = HostAndPortUtil - .getRedisServers().get(1); + + private static HostAndPort redis1 = HostAndPortUtil.getRedisServers() + .get(0); + private static HostAndPort redis2 = HostAndPortUtil.getRedisServers() + .get(1); private ShardedJedis jedis; @Before public void setUp() throws Exception { - Jedis jedis = new Jedis(redis1.host, redis1.port); - jedis.auth("foobared"); - jedis.flushAll(); - jedis.disconnect(); - jedis = new Jedis(redis2.host, redis2.port); - jedis.auth("foobared"); - jedis.flushAll(); - jedis.disconnect(); + Jedis jedis = new Jedis(redis1.getHost(), redis1.getPort()); + jedis.auth("foobared"); + jedis.flushAll(); + jedis.disconnect(); + jedis = new Jedis(redis2.getHost(), redis2.getPort()); + jedis.auth("foobared"); + jedis.flushAll(); + jedis.disconnect(); + + JedisShardInfo shardInfo1 = new JedisShardInfo(redis1.getHost(), + redis1.getPort()); + JedisShardInfo shardInfo2 = new JedisShardInfo(redis2.getHost(), + redis2.getPort()); + shardInfo1.setPassword("foobared"); + shardInfo2.setPassword("foobared"); + List shards = new ArrayList(); + shards.add(shardInfo1); + shards.add(shardInfo2); + this.jedis = new ShardedJedis(shards); - JedisShardInfo shardInfo1 = new JedisShardInfo(redis1.host, redis1.port); - JedisShardInfo shardInfo2 = new JedisShardInfo(redis2.host, redis2.port); - shardInfo1.setPassword("foobared"); - shardInfo2.setPassword("foobared"); - List shards = new ArrayList(); - shards.add(shardInfo1); - shards.add(shardInfo2); - this.jedis = new ShardedJedis(shards); } @Test public void pipeline() throws UnsupportedEncodingException { - ShardedJedisPipeline p = jedis.pipelined(); - p.set("foo", "bar"); - p.get("foo"); - List results = p.syncAndReturnAll(); + ShardedJedisPipeline p = jedis.pipelined(); + p.set("foo", "bar"); + p.get("foo"); + List results = p.syncAndReturnAll(); - assertEquals(2, results.size()); - assertEquals("OK", results.get(0)); - assertEquals("bar", results.get(1)); + assertEquals(2, results.size()); + assertEquals("OK", results.get(0)); + assertEquals("bar", results.get(1)); } @Test public void pipelineResponse() { - jedis.set("string", "foo"); - jedis.lpush("list", "foo"); - jedis.hset("hash", "foo", "bar"); - jedis.zadd("zset", 1, "foo"); - jedis.sadd("set", "foo"); + jedis.set("string", "foo"); + jedis.lpush("list", "foo"); + jedis.hset("hash", "foo", "bar"); + jedis.zadd("zset", 1, "foo"); + jedis.sadd("set", "foo"); - ShardedJedisPipeline p = jedis.pipelined(); - Response string = p.get("string"); - Response del = p.del("string"); - Response emptyString = p.get("string"); - Response list = p.lpop("list"); - Response hash = p.hget("hash", "foo"); - Response> zset = p.zrange("zset", 0, -1); - Response set = p.spop("set"); - Response blist = p.exists("list"); - Response zincrby = p.zincrby("zset", 1, "foo"); - Response zcard = p.zcard("zset"); - p.lpush("list", "bar"); - Response> lrange = p.lrange("list", 0, -1); - Response> hgetAll = p.hgetAll("hash"); - p.sadd("set", "foo"); - Response> smembers = p.smembers("set"); - Response> zrangeWithScores = p.zrangeWithScores("zset", 0, - -1); - p.sync(); + ShardedJedisPipeline p = jedis.pipelined(); + Response string = p.get("string"); + Response del = p.del("string"); + Response emptyString = p.get("string"); + Response list = p.lpop("list"); + Response hash = p.hget("hash", "foo"); + Response> zset = p.zrange("zset", 0, -1); + Response set = p.spop("set"); + Response blist = p.exists("list"); + Response zincrby = p.zincrby("zset", 1, "foo"); + Response zcard = p.zcard("zset"); + p.lpush("list", "bar"); + Response> lrange = p.lrange("list", 0, -1); + Response> hgetAll = p.hgetAll("hash"); + p.sadd("set", "foo"); + Response> smembers = p.smembers("set"); + Response> zrangeWithScores = p.zrangeWithScores("zset", 0, + -1); + p.sync(); - assertEquals("foo", string.get()); - assertEquals(Long.valueOf(1), del.get()); - assertNull(emptyString.get()); - assertEquals("foo", list.get()); - assertEquals("bar", hash.get()); - assertEquals("foo", zset.get().iterator().next()); - assertEquals("foo", set.get()); - assertFalse(blist.get()); - assertEquals(Double.valueOf(2), zincrby.get()); - assertEquals(Long.valueOf(1), zcard.get()); - assertEquals(1, lrange.get().size()); - assertNotNull(hgetAll.get().get("foo")); - assertEquals(1, smembers.get().size()); - assertEquals(1, zrangeWithScores.get().size()); + assertEquals("foo", string.get()); + assertEquals(Long.valueOf(1), del.get()); + assertNull(emptyString.get()); + assertEquals("foo", list.get()); + assertEquals("bar", hash.get()); + assertEquals("foo", zset.get().iterator().next()); + assertEquals("foo", set.get()); + assertFalse(blist.get()); + assertEquals(Double.valueOf(2), zincrby.get()); + assertEquals(Long.valueOf(1), zcard.get()); + assertEquals(1, lrange.get().size()); + assertNotNull(hgetAll.get().get("foo")); + assertEquals(1, smembers.get().size()); + assertEquals(1, zrangeWithScores.get().size()); } @Test(expected = JedisDataException.class) public void pipelineResponseWithinPipeline() { - jedis.set("string", "foo"); + jedis.set("string", "foo"); - ShardedJedisPipeline p = jedis.pipelined(); - Response string = p.get("string"); - string.get(); - p.sync(); + ShardedJedisPipeline p = jedis.pipelined(); + Response string = p.get("string"); + string.get(); + p.sync(); } @Test public void canRetrieveUnsetKey() { - ShardedJedisPipeline p = jedis.pipelined(); - Response shouldNotExist = p.get(UUID.randomUUID().toString()); - p.sync(); - assertNull(shouldNotExist.get()); + ShardedJedisPipeline p = jedis.pipelined(); + Response shouldNotExist = p.get(UUID.randomUUID().toString()); + p.sync(); + assertNull(shouldNotExist.get()); } } diff --git a/src/test/java/redis/clients/jedis/tests/ShardedJedisPoolTest.java b/src/test/java/redis/clients/jedis/tests/ShardedJedisPoolTest.java index 664e767..35d7c54 100644 --- a/src/test/java/redis/clients/jedis/tests/ShardedJedisPoolTest.java +++ b/src/test/java/redis/clients/jedis/tests/ShardedJedisPoolTest.java @@ -5,222 +5,230 @@ import java.net.URISyntaxException; import java.util.ArrayList; import java.util.List; -import org.apache.commons.pool.impl.GenericObjectPool; -import org.apache.commons.pool.impl.GenericObjectPool.Config; +import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import redis.clients.jedis.HostAndPort; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisShardInfo; import redis.clients.jedis.ShardedJedis; import redis.clients.jedis.ShardedJedisPool; import redis.clients.jedis.exceptions.JedisConnectionException; -import redis.clients.jedis.tests.HostAndPortUtil.HostAndPort; public class ShardedJedisPoolTest extends Assert { private static HostAndPort redis1 = HostAndPortUtil.getRedisServers() - .get(0); + .get(0); private static HostAndPort redis2 = HostAndPortUtil.getRedisServers() - .get(1); + .get(1); private List shards; @Before public void startUp() { - shards = new ArrayList(); - shards.add(new JedisShardInfo(redis1.host, redis1.port)); - shards.add(new JedisShardInfo(redis2.host, redis2.port)); - shards.get(0).setPassword("foobared"); - shards.get(1).setPassword("foobared"); - Jedis j = new Jedis(shards.get(0)); - j.connect(); - j.flushAll(); - j.disconnect(); - j = new Jedis(shards.get(1)); - j.connect(); - j.flushAll(); - j.disconnect(); + shards = new ArrayList(); + shards.add(new JedisShardInfo(redis1.getHost(), redis1.getPort())); + shards.add(new JedisShardInfo(redis2.getHost(), redis2.getPort())); + shards.get(0).setPassword("foobared"); + shards.get(1).setPassword("foobared"); + Jedis j = new Jedis(shards.get(0)); + j.connect(); + j.flushAll(); + j.disconnect(); + j = new Jedis(shards.get(1)); + j.connect(); + j.flushAll(); + j.disconnect(); + } @Test public void checkConnections() { - ShardedJedisPool pool = new ShardedJedisPool(new Config(), shards); - ShardedJedis jedis = pool.getResource(); - jedis.set("foo", "bar"); - assertEquals("bar", jedis.get("foo")); - pool.returnResource(jedis); - pool.destroy(); + ShardedJedisPool pool = new ShardedJedisPool( + new GenericObjectPoolConfig(), shards); + ShardedJedis jedis = pool.getResource(); + jedis.set("foo", "bar"); + assertEquals("bar", jedis.get("foo")); + pool.returnResource(jedis); + pool.destroy(); } @Test public void checkConnectionWithDefaultPort() { - ShardedJedisPool pool = new ShardedJedisPool(new Config(), shards); - ShardedJedis jedis = pool.getResource(); - jedis.set("foo", "bar"); - assertEquals("bar", jedis.get("foo")); - pool.returnResource(jedis); - pool.destroy(); + ShardedJedisPool pool = new ShardedJedisPool( + new GenericObjectPoolConfig(), shards); + ShardedJedis jedis = pool.getResource(); + jedis.set("foo", "bar"); + assertEquals("bar", jedis.get("foo")); + pool.returnResource(jedis); + pool.destroy(); } @Test public void checkJedisIsReusedWhenReturned() { - ShardedJedisPool pool = new ShardedJedisPool(new Config(), shards); - ShardedJedis jedis = pool.getResource(); - jedis.set("foo", "0"); - pool.returnResource(jedis); + ShardedJedisPool pool = new ShardedJedisPool( + new GenericObjectPoolConfig(), shards); + ShardedJedis jedis = pool.getResource(); + jedis.set("foo", "0"); + pool.returnResource(jedis); - jedis = pool.getResource(); - jedis.incr("foo"); - pool.returnResource(jedis); - pool.destroy(); + jedis = pool.getResource(); + jedis.incr("foo"); + pool.returnResource(jedis); + pool.destroy(); } @Test public void checkPoolRepairedWhenJedisIsBroken() { - ShardedJedisPool pool = new ShardedJedisPool(new Config(), shards); - ShardedJedis jedis = pool.getResource(); - jedis.disconnect(); - pool.returnBrokenResource(jedis); + ShardedJedisPool pool = new ShardedJedisPool( + new GenericObjectPoolConfig(), shards); + ShardedJedis jedis = pool.getResource(); + jedis.disconnect(); + pool.returnBrokenResource(jedis); - jedis = pool.getResource(); - jedis.incr("foo"); - pool.returnResource(jedis); - pool.destroy(); + jedis = pool.getResource(); + jedis.incr("foo"); + pool.returnResource(jedis); + pool.destroy(); } @Test(expected = JedisConnectionException.class) public void checkPoolOverflow() { - Config config = new Config(); - config.maxActive = 1; - config.whenExhaustedAction = GenericObjectPool.WHEN_EXHAUSTED_FAIL; + GenericObjectPoolConfig config = new GenericObjectPoolConfig(); + config.setMaxTotal(1); + config.setBlockWhenExhausted(false); - ShardedJedisPool pool = new ShardedJedisPool(config, shards); + ShardedJedisPool pool = new ShardedJedisPool(config, shards); - ShardedJedis jedis = pool.getResource(); - jedis.set("foo", "0"); + ShardedJedis jedis = pool.getResource(); + jedis.set("foo", "0"); - ShardedJedis newJedis = pool.getResource(); - newJedis.incr("foo"); + ShardedJedis newJedis = pool.getResource(); + newJedis.incr("foo"); } @Test public void shouldNotShareInstances() { - Config config = new Config(); - config.maxActive = 2; - config.whenExhaustedAction = GenericObjectPool.WHEN_EXHAUSTED_FAIL; + GenericObjectPoolConfig config = new GenericObjectPoolConfig(); + config.setMaxTotal(2); - ShardedJedisPool pool = new ShardedJedisPool(config, shards); + ShardedJedisPool pool = new ShardedJedisPool(config, shards); - ShardedJedis j1 = pool.getResource(); - ShardedJedis j2 = pool.getResource(); + ShardedJedis j1 = pool.getResource(); + ShardedJedis j2 = pool.getResource(); - assertNotSame(j1.getShard("foo"), j2.getShard("foo")); + assertNotSame(j1.getShard("foo"), j2.getShard("foo")); } @Test public void checkFailedJedisServer() { - ShardedJedisPool pool = new ShardedJedisPool(new Config(), shards); - ShardedJedis jedis = pool.getResource(); - jedis.incr("foo"); - pool.returnResource(jedis); - pool.destroy(); + ShardedJedisPool pool = new ShardedJedisPool( + new GenericObjectPoolConfig(), shards); + ShardedJedis jedis = pool.getResource(); + jedis.incr("foo"); + pool.returnResource(jedis); + pool.destroy(); } @Test public void shouldReturnActiveShardsWhenOneGoesOffline() { - Config redisConfig = new Config(); - redisConfig.testOnBorrow = false; - ShardedJedisPool pool = new ShardedJedisPool(redisConfig, shards); - ShardedJedis jedis = pool.getResource(); - // fill the shards - for (int i = 0; i < 1000; i++) { - jedis.set("a-test-" + i, "0"); - } - pool.returnResource(jedis); - // check quantity for each shard - Jedis j = new Jedis(shards.get(0)); - j.connect(); - Long c1 = j.dbSize(); - j.disconnect(); - j = new Jedis(shards.get(1)); - j.connect(); - Long c2 = j.dbSize(); - j.disconnect(); - // shutdown shard 2 and check thay the pool returns an instance with c1 - // items on one shard - // alter shard 1 and recreate pool - pool.destroy(); - shards.set(1, new JedisShardInfo("nohost", 1234)); - pool = new ShardedJedisPool(redisConfig, shards); - jedis = pool.getResource(); - Long actual = Long.valueOf(0); - Long fails = Long.valueOf(0); - for (int i = 0; i < 1000; i++) { - try { - jedis.get("a-test-" + i); - actual++; - } catch (RuntimeException e) { - fails++; - } - } - pool.returnResource(jedis); - pool.destroy(); - assertEquals(actual, c1); - assertEquals(fails, c2); + GenericObjectPoolConfig redisConfig = new GenericObjectPoolConfig(); + redisConfig.setTestOnBorrow(false); + ShardedJedisPool pool = new ShardedJedisPool(redisConfig, shards); + ShardedJedis jedis = pool.getResource(); + // fill the shards + for (int i = 0; i < 1000; i++) { + jedis.set("a-test-" + i, "0"); + } + pool.returnResource(jedis); + // check quantity for each shard + Jedis j = new Jedis(shards.get(0)); + j.connect(); + Long c1 = j.dbSize(); + j.disconnect(); + j = new Jedis(shards.get(1)); + j.connect(); + Long c2 = j.dbSize(); + j.disconnect(); + // shutdown shard 2 and check thay the pool returns an instance with c1 + // items on one shard + // alter shard 1 and recreate pool + pool.destroy(); + shards.set(1, new JedisShardInfo("nohost", 1234)); + pool = new ShardedJedisPool(redisConfig, shards); + jedis = pool.getResource(); + Long actual = Long.valueOf(0); + Long fails = Long.valueOf(0); + for (int i = 0; i < 1000; i++) { + try { + jedis.get("a-test-" + i); + actual++; + } catch (RuntimeException e) { + fails++; + } + } + pool.returnResource(jedis); + pool.destroy(); + assertEquals(actual, c1); + assertEquals(fails, c2); } - + @Test public void startWithUrlString() { Jedis j = new Jedis("localhost", 6380); j.auth("foobared"); j.set("foo", "bar"); - + j = new Jedis("localhost", 6379); j.auth("foobared"); j.set("foo", "bar"); - + List shards = new ArrayList(); shards.add(new JedisShardInfo("redis://:foobared@localhost:6380")); shards.add(new JedisShardInfo("redis://:foobared@localhost:6379")); - - Config redisConfig = new Config(); + + GenericObjectPoolConfig redisConfig = new GenericObjectPoolConfig(); ShardedJedisPool pool = new ShardedJedisPool(redisConfig, shards); - - Jedis[] jedises = pool.getResource().getAllShards().toArray(new Jedis[2]); - + + Jedis[] jedises = pool.getResource().getAllShards() + .toArray(new Jedis[2]); + Jedis jedis = jedises[0]; assertEquals("PONG", jedis.ping()); assertEquals("bar", jedis.get("foo")); - + jedis = jedises[1]; assertEquals("PONG", jedis.ping()); assertEquals("bar", jedis.get("foo")); } - + @Test public void startWithUrl() throws URISyntaxException { Jedis j = new Jedis("localhost", 6380); j.auth("foobared"); j.set("foo", "bar"); - + j = new Jedis("localhost", 6379); j.auth("foobared"); j.set("foo", "bar"); - + List shards = new ArrayList(); - shards.add(new JedisShardInfo(new URI("redis://:foobared@localhost:6380"))); - shards.add(new JedisShardInfo(new URI("redis://:foobared@localhost:6379"))); - - Config redisConfig = new Config(); + shards.add(new JedisShardInfo(new URI( + "redis://:foobared@localhost:6380"))); + shards.add(new JedisShardInfo(new URI( + "redis://:foobared@localhost:6379"))); + + GenericObjectPoolConfig redisConfig = new GenericObjectPoolConfig(); ShardedJedisPool pool = new ShardedJedisPool(redisConfig, shards); - - Jedis[] jedises = pool.getResource().getAllShards().toArray(new Jedis[2]); - + + Jedis[] jedises = pool.getResource().getAllShards() + .toArray(new Jedis[2]); + Jedis jedis = jedises[0]; assertEquals("PONG", jedis.ping()); assertEquals("bar", jedis.get("foo")); - + jedis = jedises[1]; assertEquals("PONG", jedis.ping()); assertEquals("bar", jedis.get("foo")); diff --git a/src/test/java/redis/clients/jedis/tests/ShardedJedisTest.java b/src/test/java/redis/clients/jedis/tests/ShardedJedisTest.java index e04a998..5a71391 100644 --- a/src/test/java/redis/clients/jedis/tests/ShardedJedisTest.java +++ b/src/test/java/redis/clients/jedis/tests/ShardedJedisTest.java @@ -6,298 +6,300 @@ import java.util.List; import org.junit.Assert; import org.junit.Test; +import redis.clients.jedis.HostAndPort; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisShardInfo; import redis.clients.jedis.Protocol; import redis.clients.jedis.ShardedJedis; import redis.clients.jedis.ShardedJedisPipeline; -import redis.clients.jedis.tests.HostAndPortUtil.HostAndPort; import redis.clients.util.Hashing; import redis.clients.util.SafeEncoder; import redis.clients.util.Sharded; public class ShardedJedisTest extends Assert { private static HostAndPort redis1 = HostAndPortUtil.getRedisServers() - .get(0); + .get(0); private static HostAndPort redis2 = HostAndPortUtil.getRedisServers() - .get(1); + .get(1); private List getKeysDifferentShard(ShardedJedis jedis) { - List ret = new ArrayList(); - JedisShardInfo first = jedis.getShardInfo("a0"); - ret.add("a0"); - for (int i = 1; i < 100; ++i) { - JedisShardInfo actual = jedis.getShardInfo("a" + i); - if (actual != first) { - ret.add("a" + i); - break; + List ret = new ArrayList(); + JedisShardInfo first = jedis.getShardInfo("a0"); + ret.add("a0"); + for (int i = 1; i < 100; ++i) { + JedisShardInfo actual = jedis.getShardInfo("a" + i); + if (actual != first) { + ret.add("a" + i); + break; - } + } - } - return ret; + } + return ret; } @Test public void checkSharding() { - List shards = new ArrayList(); - shards.add(new JedisShardInfo(redis1.host, redis1.port)); - shards.add(new JedisShardInfo(redis2.host, redis2.port)); - ShardedJedis jedis = new ShardedJedis(shards); - List keys = getKeysDifferentShard(jedis); - JedisShardInfo s1 = jedis.getShardInfo(keys.get(0)); - JedisShardInfo s2 = jedis.getShardInfo(keys.get(1)); - assertNotSame(s1, s2); + List shards = new ArrayList(); + shards.add(new JedisShardInfo(redis1.getHost(), redis1.getPort())); + shards.add(new JedisShardInfo(redis2.getHost(), redis2.getPort())); + ShardedJedis jedis = new ShardedJedis(shards); + List keys = getKeysDifferentShard(jedis); + JedisShardInfo s1 = jedis.getShardInfo(keys.get(0)); + JedisShardInfo s2 = jedis.getShardInfo(keys.get(1)); + assertNotSame(s1, s2); } @Test public void trySharding() { - List shards = new ArrayList(); - JedisShardInfo si = new JedisShardInfo(redis1.host, redis1.port); - si.setPassword("foobared"); - shards.add(si); - si = new JedisShardInfo(redis2.host, redis2.port); - si.setPassword("foobared"); - shards.add(si); - ShardedJedis jedis = new ShardedJedis(shards); - jedis.set("a", "bar"); - JedisShardInfo s1 = jedis.getShardInfo("a"); - jedis.set("b", "bar1"); - JedisShardInfo s2 = jedis.getShardInfo("b"); - jedis.disconnect(); + List shards = new ArrayList(); + JedisShardInfo si = new JedisShardInfo(redis1.getHost(), + redis1.getPort()); + si.setPassword("foobared"); + shards.add(si); + si = new JedisShardInfo(redis2.getHost(), redis2.getPort()); + si.setPassword("foobared"); + shards.add(si); + ShardedJedis jedis = new ShardedJedis(shards); + jedis.set("a", "bar"); + JedisShardInfo s1 = jedis.getShardInfo("a"); + jedis.set("b", "bar1"); + JedisShardInfo s2 = jedis.getShardInfo("b"); + jedis.disconnect(); - Jedis j = new Jedis(s1.getHost(), s1.getPort()); - j.auth("foobared"); - assertEquals("bar", j.get("a")); - j.disconnect(); + Jedis j = new Jedis(s1.getHost(), s1.getPort()); + j.auth("foobared"); + assertEquals("bar", j.get("a")); + j.disconnect(); - j = new Jedis(s2.getHost(), s2.getPort()); - j.auth("foobared"); - assertEquals("bar1", j.get("b")); - j.disconnect(); + j = new Jedis(s2.getHost(), s2.getPort()); + j.auth("foobared"); + assertEquals("bar1", j.get("b")); + j.disconnect(); } @Test public void tryShardingWithMurmure() { - List shards = new ArrayList(); - JedisShardInfo si = new JedisShardInfo(redis1.host, redis1.port); - si.setPassword("foobared"); - shards.add(si); - si = new JedisShardInfo(redis2.host, redis2.port); - si.setPassword("foobared"); - shards.add(si); - ShardedJedis jedis = new ShardedJedis(shards, Hashing.MURMUR_HASH); - jedis.set("a", "bar"); - JedisShardInfo s1 = jedis.getShardInfo("a"); - jedis.set("b", "bar1"); - JedisShardInfo s2 = jedis.getShardInfo("b"); - jedis.disconnect(); + List shards = new ArrayList(); + JedisShardInfo si = new JedisShardInfo(redis1.getHost(), + redis1.getPort()); + si.setPassword("foobared"); + shards.add(si); + si = new JedisShardInfo(redis2.getHost(), redis2.getPort()); + si.setPassword("foobared"); + shards.add(si); + ShardedJedis jedis = new ShardedJedis(shards, Hashing.MURMUR_HASH); + jedis.set("a", "bar"); + JedisShardInfo s1 = jedis.getShardInfo("a"); + jedis.set("b", "bar1"); + JedisShardInfo s2 = jedis.getShardInfo("b"); + jedis.disconnect(); - Jedis j = new Jedis(s1.getHost(), s1.getPort()); - j.auth("foobared"); - assertEquals("bar", j.get("a")); - j.disconnect(); + Jedis j = new Jedis(s1.getHost(), s1.getPort()); + j.auth("foobared"); + assertEquals("bar", j.get("a")); + j.disconnect(); - j = new Jedis(s2.getHost(), s2.getPort()); - j.auth("foobared"); - assertEquals("bar1", j.get("b")); - j.disconnect(); + j = new Jedis(s2.getHost(), s2.getPort()); + j.auth("foobared"); + assertEquals("bar1", j.get("b")); + j.disconnect(); } @Test public void checkKeyTags() { - List shards = new ArrayList(); - shards.add(new JedisShardInfo(redis1.host, redis1.port)); - shards.add(new JedisShardInfo(redis2.host, redis2.port)); - ShardedJedis jedis = new ShardedJedis(shards, - ShardedJedis.DEFAULT_KEY_TAG_PATTERN); + List shards = new ArrayList(); + shards.add(new JedisShardInfo(redis1.getHost(), redis1.getPort())); + shards.add(new JedisShardInfo(redis2.getHost(), redis2.getPort())); + ShardedJedis jedis = new ShardedJedis(shards, + ShardedJedis.DEFAULT_KEY_TAG_PATTERN); - assertEquals(jedis.getKeyTag("foo"), "foo"); - assertEquals(jedis.getKeyTag("foo{bar}"), "bar"); - assertEquals(jedis.getKeyTag("foo{bar}}"), "bar"); // default pattern is - // non greedy - assertEquals(jedis.getKeyTag("{bar}foo"), "bar"); // Key tag may appear - // anywhere - assertEquals(jedis.getKeyTag("f{bar}oo"), "bar"); // Key tag may appear - // anywhere + assertEquals(jedis.getKeyTag("foo"), "foo"); + assertEquals(jedis.getKeyTag("foo{bar}"), "bar"); + assertEquals(jedis.getKeyTag("foo{bar}}"), "bar"); // default pattern is + // non greedy + assertEquals(jedis.getKeyTag("{bar}foo"), "bar"); // Key tag may appear + // anywhere + assertEquals(jedis.getKeyTag("f{bar}oo"), "bar"); // Key tag may appear + // anywhere - JedisShardInfo s1 = jedis.getShardInfo("abc{bar}"); - JedisShardInfo s2 = jedis.getShardInfo("foo{bar}"); - assertSame(s1, s2); + JedisShardInfo s1 = jedis.getShardInfo("abc{bar}"); + JedisShardInfo s2 = jedis.getShardInfo("foo{bar}"); + assertSame(s1, s2); - List keys = getKeysDifferentShard(jedis); - JedisShardInfo s3 = jedis.getShardInfo(keys.get(0)); - JedisShardInfo s4 = jedis.getShardInfo(keys.get(1)); - assertNotSame(s3, s4); + List keys = getKeysDifferentShard(jedis); + JedisShardInfo s3 = jedis.getShardInfo(keys.get(0)); + JedisShardInfo s4 = jedis.getShardInfo(keys.get(1)); + assertNotSame(s3, s4); - ShardedJedis jedis2 = new ShardedJedis(shards); + ShardedJedis jedis2 = new ShardedJedis(shards); - assertEquals(jedis2.getKeyTag("foo"), "foo"); - assertNotSame(jedis2.getKeyTag("foo{bar}"), "bar"); + assertEquals(jedis2.getKeyTag("foo"), "foo"); + assertNotSame(jedis2.getKeyTag("foo{bar}"), "bar"); - JedisShardInfo s5 = jedis2.getShardInfo(keys.get(0) + "{bar}"); - JedisShardInfo s6 = jedis2.getShardInfo(keys.get(1) + "{bar}"); - assertNotSame(s5, s6); + JedisShardInfo s5 = jedis2.getShardInfo(keys.get(0) + "{bar}"); + JedisShardInfo s6 = jedis2.getShardInfo(keys.get(1) + "{bar}"); + assertNotSame(s5, s6); } @Test public void shardedPipeline() { - List shards = new ArrayList(); - shards.add(new JedisShardInfo(redis1.host, redis1.port)); - shards.add(new JedisShardInfo(redis2.host, redis2.port)); - shards.get(0).setPassword("foobared"); - shards.get(1).setPassword("foobared"); - ShardedJedis jedis = new ShardedJedis(shards); + List shards = new ArrayList(); + shards.add(new JedisShardInfo(redis1.getHost(), redis1.getPort())); + shards.add(new JedisShardInfo(redis2.getHost(), redis2.getPort())); + shards.get(0).setPassword("foobared"); + shards.get(1).setPassword("foobared"); + ShardedJedis jedis = new ShardedJedis(shards); - final List keys = getKeysDifferentShard(jedis); - jedis.set(keys.get(0), "a"); - jedis.set(keys.get(1), "b"); + final List keys = getKeysDifferentShard(jedis); + jedis.set(keys.get(0), "a"); + jedis.set(keys.get(1), "b"); - assertNotSame(jedis.getShard(keys.get(0)), jedis.getShard(keys.get(1))); + assertNotSame(jedis.getShard(keys.get(0)), jedis.getShard(keys.get(1))); - List results = jedis.pipelined(new ShardedJedisPipeline() { - public void execute() { - get(keys.get(0)); - get(keys.get(1)); - } - }); + List results = jedis.pipelined(new ShardedJedisPipeline() { + public void execute() { + get(keys.get(0)); + get(keys.get(1)); + } + }); - List expected = new ArrayList(2); - expected.add(SafeEncoder.encode("a")); - expected.add(SafeEncoder.encode("b")); + List expected = new ArrayList(2); + expected.add(SafeEncoder.encode("a")); + expected.add(SafeEncoder.encode("b")); - assertEquals(2, results.size()); - assertArrayEquals(SafeEncoder.encode("a"), (byte[]) results.get(0)); - assertArrayEquals(SafeEncoder.encode("b"), (byte[]) results.get(1)); + assertEquals(2, results.size()); + assertArrayEquals(SafeEncoder.encode("a"), (byte[]) results.get(0)); + assertArrayEquals(SafeEncoder.encode("b"), (byte[]) results.get(1)); } @Test public void testMD5Sharding() { - List shards = new ArrayList(3); - shards.add(new JedisShardInfo("localhost", Protocol.DEFAULT_PORT)); - shards.add(new JedisShardInfo("localhost", Protocol.DEFAULT_PORT + 1)); - shards.add(new JedisShardInfo("localhost", Protocol.DEFAULT_PORT + 2)); - Sharded sharded = new Sharded( - shards, Hashing.MD5); - int shard_6379 = 0; - int shard_6380 = 0; - int shard_6381 = 0; - for (int i = 0; i < 1000; i++) { - JedisShardInfo jedisShardInfo = sharded.getShardInfo(Integer - .toString(i)); - switch (jedisShardInfo.getPort()) { - case 6379: - shard_6379++; - break; - case 6380: - shard_6380++; - break; - case 6381: - shard_6381++; - break; - default: - fail("Attempting to use a non-defined shard!!:" - + jedisShardInfo); - break; - } - } - assertTrue(shard_6379 > 300 && shard_6379 < 400); - assertTrue(shard_6380 > 300 && shard_6380 < 400); - assertTrue(shard_6381 > 300 && shard_6381 < 400); + List shards = new ArrayList(3); + shards.add(new JedisShardInfo("localhost", Protocol.DEFAULT_PORT)); + shards.add(new JedisShardInfo("localhost", Protocol.DEFAULT_PORT + 1)); + shards.add(new JedisShardInfo("localhost", Protocol.DEFAULT_PORT + 2)); + Sharded sharded = new Sharded( + shards, Hashing.MD5); + int shard_6379 = 0; + int shard_6380 = 0; + int shard_6381 = 0; + for (int i = 0; i < 1000; i++) { + JedisShardInfo jedisShardInfo = sharded.getShardInfo(Integer + .toString(i)); + switch (jedisShardInfo.getPort()) { + case 6379: + shard_6379++; + break; + case 6380: + shard_6380++; + break; + case 6381: + shard_6381++; + break; + default: + fail("Attempting to use a non-defined shard!!:" + + jedisShardInfo); + break; + } + } + assertTrue(shard_6379 > 300 && shard_6379 < 400); + assertTrue(shard_6380 > 300 && shard_6380 < 400); + assertTrue(shard_6381 > 300 && shard_6381 < 400); } @Test public void testMurmurSharding() { - List shards = new ArrayList(3); - shards.add(new JedisShardInfo("localhost", Protocol.DEFAULT_PORT)); - shards.add(new JedisShardInfo("localhost", Protocol.DEFAULT_PORT + 1)); - shards.add(new JedisShardInfo("localhost", Protocol.DEFAULT_PORT + 2)); - Sharded sharded = new Sharded( - shards, Hashing.MURMUR_HASH); - int shard_6379 = 0; - int shard_6380 = 0; - int shard_6381 = 0; - for (int i = 0; i < 1000; i++) { - JedisShardInfo jedisShardInfo = sharded.getShardInfo(Integer - .toString(i)); - switch (jedisShardInfo.getPort()) { - case 6379: - shard_6379++; - break; - case 6380: - shard_6380++; - break; - case 6381: - shard_6381++; - break; - default: - fail("Attempting to use a non-defined shard!!:" - + jedisShardInfo); - break; - } - } - assertTrue(shard_6379 > 300 && shard_6379 < 400); - assertTrue(shard_6380 > 300 && shard_6380 < 400); - assertTrue(shard_6381 > 300 && shard_6381 < 400); + List shards = new ArrayList(3); + shards.add(new JedisShardInfo("localhost", Protocol.DEFAULT_PORT)); + shards.add(new JedisShardInfo("localhost", Protocol.DEFAULT_PORT + 1)); + shards.add(new JedisShardInfo("localhost", Protocol.DEFAULT_PORT + 2)); + Sharded sharded = new Sharded( + shards, Hashing.MURMUR_HASH); + int shard_6379 = 0; + int shard_6380 = 0; + int shard_6381 = 0; + for (int i = 0; i < 1000; i++) { + JedisShardInfo jedisShardInfo = sharded.getShardInfo(Integer + .toString(i)); + switch (jedisShardInfo.getPort()) { + case 6379: + shard_6379++; + break; + case 6380: + shard_6380++; + break; + case 6381: + shard_6381++; + break; + default: + fail("Attempting to use a non-defined shard!!:" + + jedisShardInfo); + break; + } + } + assertTrue(shard_6379 > 300 && shard_6379 < 400); + assertTrue(shard_6380 > 300 && shard_6380 < 400); + assertTrue(shard_6381 > 300 && shard_6381 < 400); } @Test public void testMasterSlaveShardingConsistency() { - List shards = new ArrayList(3); - shards.add(new JedisShardInfo("localhost", Protocol.DEFAULT_PORT)); - shards.add(new JedisShardInfo("localhost", Protocol.DEFAULT_PORT + 1)); - shards.add(new JedisShardInfo("localhost", Protocol.DEFAULT_PORT + 2)); - Sharded sharded = new Sharded( - shards, Hashing.MURMUR_HASH); + List shards = new ArrayList(3); + shards.add(new JedisShardInfo("localhost", Protocol.DEFAULT_PORT)); + shards.add(new JedisShardInfo("localhost", Protocol.DEFAULT_PORT + 1)); + shards.add(new JedisShardInfo("localhost", Protocol.DEFAULT_PORT + 2)); + Sharded sharded = new Sharded( + shards, Hashing.MURMUR_HASH); - List otherShards = new ArrayList(3); - otherShards.add(new JedisShardInfo("otherhost", Protocol.DEFAULT_PORT)); - otherShards.add(new JedisShardInfo("otherhost", - Protocol.DEFAULT_PORT + 1)); - otherShards.add(new JedisShardInfo("otherhost", - Protocol.DEFAULT_PORT + 2)); - Sharded sharded2 = new Sharded( - otherShards, Hashing.MURMUR_HASH); + List otherShards = new ArrayList(3); + otherShards.add(new JedisShardInfo("otherhost", Protocol.DEFAULT_PORT)); + otherShards.add(new JedisShardInfo("otherhost", + Protocol.DEFAULT_PORT + 1)); + otherShards.add(new JedisShardInfo("otherhost", + Protocol.DEFAULT_PORT + 2)); + Sharded sharded2 = new Sharded( + otherShards, Hashing.MURMUR_HASH); - for (int i = 0; i < 1000; i++) { - JedisShardInfo jedisShardInfo = sharded.getShardInfo(Integer - .toString(i)); - JedisShardInfo jedisShardInfo2 = sharded2.getShardInfo(Integer - .toString(i)); - assertEquals(shards.indexOf(jedisShardInfo), otherShards - .indexOf(jedisShardInfo2)); - } + for (int i = 0; i < 1000; i++) { + JedisShardInfo jedisShardInfo = sharded.getShardInfo(Integer + .toString(i)); + JedisShardInfo jedisShardInfo2 = sharded2.getShardInfo(Integer + .toString(i)); + assertEquals(shards.indexOf(jedisShardInfo), + otherShards.indexOf(jedisShardInfo2)); + } } @Test public void testMasterSlaveShardingConsistencyWithShardNaming() { - List shards = new ArrayList(3); - shards.add(new JedisShardInfo("localhost", Protocol.DEFAULT_PORT, - "HOST1:1234")); - shards.add(new JedisShardInfo("localhost", Protocol.DEFAULT_PORT + 1, - "HOST2:1234")); - shards.add(new JedisShardInfo("localhost", Protocol.DEFAULT_PORT + 2, - "HOST3:1234")); - Sharded sharded = new Sharded( - shards, Hashing.MURMUR_HASH); + List shards = new ArrayList(3); + shards.add(new JedisShardInfo("localhost", Protocol.DEFAULT_PORT, + "HOST1:1234")); + shards.add(new JedisShardInfo("localhost", Protocol.DEFAULT_PORT + 1, + "HOST2:1234")); + shards.add(new JedisShardInfo("localhost", Protocol.DEFAULT_PORT + 2, + "HOST3:1234")); + Sharded sharded = new Sharded( + shards, Hashing.MURMUR_HASH); - List otherShards = new ArrayList(3); - otherShards.add(new JedisShardInfo("otherhost", Protocol.DEFAULT_PORT, - "HOST2:1234")); - otherShards.add(new JedisShardInfo("otherhost", - Protocol.DEFAULT_PORT + 1, "HOST3:1234")); - otherShards.add(new JedisShardInfo("otherhost", - Protocol.DEFAULT_PORT + 2, "HOST1:1234")); - Sharded sharded2 = new Sharded( - otherShards, Hashing.MURMUR_HASH); + List otherShards = new ArrayList(3); + otherShards.add(new JedisShardInfo("otherhost", Protocol.DEFAULT_PORT, + "HOST2:1234")); + otherShards.add(new JedisShardInfo("otherhost", + Protocol.DEFAULT_PORT + 1, "HOST3:1234")); + otherShards.add(new JedisShardInfo("otherhost", + Protocol.DEFAULT_PORT + 2, "HOST1:1234")); + Sharded sharded2 = new Sharded( + otherShards, Hashing.MURMUR_HASH); - for (int i = 0; i < 1000; i++) { - JedisShardInfo jedisShardInfo = sharded.getShardInfo(Integer - .toString(i)); - JedisShardInfo jedisShardInfo2 = sharded2.getShardInfo(Integer - .toString(i)); - assertEquals(jedisShardInfo.getName(), jedisShardInfo2.getName()); - } + for (int i = 0; i < 1000; i++) { + JedisShardInfo jedisShardInfo = sharded.getShardInfo(Integer + .toString(i)); + JedisShardInfo jedisShardInfo2 = sharded2.getShardInfo(Integer + .toString(i)); + assertEquals(jedisShardInfo.getName(), jedisShardInfo2.getName()); + } } } \ No newline at end of file diff --git a/src/test/java/redis/clients/jedis/tests/benchmark/GetSetBenchmark.java b/src/test/java/redis/clients/jedis/tests/benchmark/GetSetBenchmark.java index 8f944f4..4eaa17b 100644 --- a/src/test/java/redis/clients/jedis/tests/benchmark/GetSetBenchmark.java +++ b/src/test/java/redis/clients/jedis/tests/benchmark/GetSetBenchmark.java @@ -4,17 +4,17 @@ import java.io.IOException; import java.net.UnknownHostException; import java.util.Calendar; +import redis.clients.jedis.HostAndPort; import redis.clients.jedis.Jedis; import redis.clients.jedis.tests.HostAndPortUtil; -import redis.clients.jedis.tests.HostAndPortUtil.HostAndPort; public class GetSetBenchmark { - private static HostAndPort hnp = HostAndPortUtil.getRedisServers().get(0); + private static HostAndPort hnp = HostAndPortUtil.getRedisServers().get(0); private static final int TOTAL_OPERATIONS = 100000; public static void main(String[] args) throws UnknownHostException, IOException { - Jedis jedis = new Jedis(hnp.host, hnp.port); + Jedis jedis = new Jedis(hnp.getHost(), hnp.getPort()); jedis.connect(); jedis.auth("foobared"); jedis.flushAll(); diff --git a/src/test/java/redis/clients/jedis/tests/benchmark/HashingBenchmark.java b/src/test/java/redis/clients/jedis/tests/benchmark/HashingBenchmark.java index 95a7991..4c75e5a 100644 --- a/src/test/java/redis/clients/jedis/tests/benchmark/HashingBenchmark.java +++ b/src/test/java/redis/clients/jedis/tests/benchmark/HashingBenchmark.java @@ -7,11 +7,11 @@ import java.util.Calendar; import java.util.Collection; import java.util.List; +import redis.clients.jedis.HostAndPort; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisShardInfo; import redis.clients.jedis.ShardedJedis; import redis.clients.jedis.tests.HostAndPortUtil; -import redis.clients.jedis.tests.HostAndPortUtil.HostAndPort; public class HashingBenchmark { private static HostAndPort hnp1 = HostAndPortUtil.getRedisServers().get(0); @@ -19,32 +19,33 @@ public class HashingBenchmark { private static final int TOTAL_OPERATIONS = 100000; public static void main(String[] args) throws UnknownHostException, - IOException { - List shards = new ArrayList(); - JedisShardInfo shard = new JedisShardInfo(hnp1.host, hnp1.port); - shard.setPassword("foobared"); - shards.add(shard); - shard = new JedisShardInfo(hnp2.host, hnp2.port); - shard.setPassword("foobared"); - shards.add(shard); - ShardedJedis jedis = new ShardedJedis(shards); - Collection allShards = jedis.getAllShards(); - for (Jedis j : allShards) { - j.flushAll(); - } + IOException { + List shards = new ArrayList(); + JedisShardInfo shard = new JedisShardInfo(hnp1.getHost(), + hnp1.getPort()); + shard.setPassword("foobared"); + shards.add(shard); + shard = new JedisShardInfo(hnp2.getHost(), hnp2.getPort()); + shard.setPassword("foobared"); + shards.add(shard); + ShardedJedis jedis = new ShardedJedis(shards); + Collection allShards = jedis.getAllShards(); + for (Jedis j : allShards) { + j.flushAll(); + } - long begin = Calendar.getInstance().getTimeInMillis(); + long begin = Calendar.getInstance().getTimeInMillis(); - for (int n = 0; n <= TOTAL_OPERATIONS; n++) { - String key = "foo" + n; - jedis.set(key, "bar" + n); - jedis.get(key); - } + for (int n = 0; n <= TOTAL_OPERATIONS; n++) { + String key = "foo" + n; + jedis.set(key, "bar" + n); + jedis.get(key); + } - long elapsed = Calendar.getInstance().getTimeInMillis() - begin; + long elapsed = Calendar.getInstance().getTimeInMillis() - begin; - jedis.disconnect(); + jedis.disconnect(); - System.out.println(((1000 * 2 * TOTAL_OPERATIONS) / elapsed) + " ops"); + System.out.println(((1000 * 2 * TOTAL_OPERATIONS) / elapsed) + " ops"); } } \ No newline at end of file diff --git a/src/test/java/redis/clients/jedis/tests/benchmark/PipelinedGetSetBenchmark.java b/src/test/java/redis/clients/jedis/tests/benchmark/PipelinedGetSetBenchmark.java index ae2f024..b783ca4 100644 --- a/src/test/java/redis/clients/jedis/tests/benchmark/PipelinedGetSetBenchmark.java +++ b/src/test/java/redis/clients/jedis/tests/benchmark/PipelinedGetSetBenchmark.java @@ -4,36 +4,36 @@ import java.io.IOException; import java.net.UnknownHostException; import java.util.Calendar; +import redis.clients.jedis.HostAndPort; import redis.clients.jedis.Jedis; import redis.clients.jedis.Pipeline; import redis.clients.jedis.tests.HostAndPortUtil; -import redis.clients.jedis.tests.HostAndPortUtil.HostAndPort; public class PipelinedGetSetBenchmark { private static HostAndPort hnp = HostAndPortUtil.getRedisServers().get(0); private static final int TOTAL_OPERATIONS = 200000; public static void main(String[] args) throws UnknownHostException, - IOException { - Jedis jedis = new Jedis(hnp.host, hnp.port); - jedis.connect(); - jedis.auth("foobared"); - jedis.flushAll(); + IOException { + Jedis jedis = new Jedis(hnp.getHost(), hnp.getPort()); + jedis.connect(); + jedis.auth("foobared"); + jedis.flushAll(); - long begin = Calendar.getInstance().getTimeInMillis(); + long begin = Calendar.getInstance().getTimeInMillis(); - Pipeline p = jedis.pipelined(); - for (int n = 0; n <= TOTAL_OPERATIONS; n++) { - String key = "foo" + n; - p.set(key, "bar" + n); - p.get(key); - } - p.sync(); + Pipeline p = jedis.pipelined(); + for (int n = 0; n <= TOTAL_OPERATIONS; n++) { + String key = "foo" + n; + p.set(key, "bar" + n); + p.get(key); + } + p.sync(); - long elapsed = Calendar.getInstance().getTimeInMillis() - begin; + long elapsed = Calendar.getInstance().getTimeInMillis() - begin; - jedis.disconnect(); + jedis.disconnect(); - System.out.println(((1000 * 2 * TOTAL_OPERATIONS) / elapsed) + " ops"); + System.out.println(((1000 * 2 * TOTAL_OPERATIONS) / elapsed) + " ops"); } } \ No newline at end of file diff --git a/src/test/java/redis/clients/jedis/tests/benchmark/PoolBenchmark.java b/src/test/java/redis/clients/jedis/tests/benchmark/PoolBenchmark.java index ae1ffc3..095ee5b 100644 --- a/src/test/java/redis/clients/jedis/tests/benchmark/PoolBenchmark.java +++ b/src/test/java/redis/clients/jedis/tests/benchmark/PoolBenchmark.java @@ -4,60 +4,61 @@ import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; -import org.apache.commons.pool.impl.GenericObjectPool.Config; +import org.apache.commons.pool2.impl.GenericObjectPoolConfig; +import redis.clients.jedis.HostAndPort; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.tests.HostAndPortUtil; -import redis.clients.jedis.tests.HostAndPortUtil.HostAndPort; public class PoolBenchmark { private static HostAndPort hnp = HostAndPortUtil.getRedisServers().get(0); private static final int TOTAL_OPERATIONS = 100000; public static void main(String[] args) throws Exception { - Jedis j = new Jedis(hnp.host, hnp.port); - j.connect(); - j.auth("foobared"); - j.flushAll(); - j.quit(); - j.disconnect(); - long t = System.currentTimeMillis(); - // withoutPool(); - withPool(); - long elapsed = System.currentTimeMillis() - t; - System.out.println(((1000 * 2 * TOTAL_OPERATIONS) / elapsed) + " ops"); + Jedis j = new Jedis(hnp.getHost(), hnp.getPort()); + j.connect(); + j.auth("foobared"); + j.flushAll(); + j.quit(); + j.disconnect(); + long t = System.currentTimeMillis(); + // withoutPool(); + withPool(); + long elapsed = System.currentTimeMillis() - t; + System.out.println(((1000 * 2 * TOTAL_OPERATIONS) / elapsed) + " ops"); } private static void withPool() throws Exception { - final JedisPool pool = new JedisPool(new Config(), hnp.host, hnp.port, - 2000, "foobared"); - List tds = new ArrayList(); + final JedisPool pool = new JedisPool(new GenericObjectPoolConfig(), + hnp.getHost(), hnp.getPort(), 2000, "foobared"); + List tds = new ArrayList(); - final AtomicInteger ind = new AtomicInteger(); - for (int i = 0; i < 50; i++) { - Thread hj = new Thread(new Runnable() { - public void run() { - for (int i = 0; (i = ind.getAndIncrement()) < TOTAL_OPERATIONS;) { - try { - Jedis j = pool.getResource(); - final String key = "foo" + i; - j.set(key, key); - j.get(key); - pool.returnResource(j); - } catch (Exception e) { - e.printStackTrace(); - } - } - } - }); - tds.add(hj); - hj.start(); - } + final AtomicInteger ind = new AtomicInteger(); + for (int i = 0; i < 50; i++) { + Thread hj = new Thread(new Runnable() { + public void run() { + for (int i = 0; (i = ind.getAndIncrement()) < TOTAL_OPERATIONS;) { + try { + Jedis j = pool.getResource(); + final String key = "foo" + i; + j.set(key, key); + j.get(key); + pool.returnResource(j); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + }); + tds.add(hj); + hj.start(); + } - for (Thread t : tds) - t.join(); + for (Thread t : tds) + t.join(); + + pool.destroy(); - pool.destroy(); } } \ No newline at end of file diff --git a/src/test/java/redis/clients/jedis/tests/benchmark/SafeEncoderBenchmark.java b/src/test/java/redis/clients/jedis/tests/benchmark/SafeEncoderBenchmark.java index bfe1fe9..3444687 100644 --- a/src/test/java/redis/clients/jedis/tests/benchmark/SafeEncoderBenchmark.java +++ b/src/test/java/redis/clients/jedis/tests/benchmark/SafeEncoderBenchmark.java @@ -10,29 +10,29 @@ public class SafeEncoderBenchmark { private static final int TOTAL_OPERATIONS = 10000000; public static void main(String[] args) throws UnknownHostException, - IOException { - long begin = Calendar.getInstance().getTimeInMillis(); + IOException { + long begin = Calendar.getInstance().getTimeInMillis(); - for (int n = 0; n <= TOTAL_OPERATIONS; n++) { - SafeEncoder.encode("foo bar!"); - } + for (int n = 0; n <= TOTAL_OPERATIONS; n++) { + SafeEncoder.encode("foo bar!"); + } - long elapsed = Calendar.getInstance().getTimeInMillis() - begin; + long elapsed = Calendar.getInstance().getTimeInMillis() - begin; - System.out.println(((1000 * TOTAL_OPERATIONS) / elapsed) - + " ops to build byte[]"); + System.out.println(((1000 * TOTAL_OPERATIONS) / elapsed) + + " ops to build byte[]"); - begin = Calendar.getInstance().getTimeInMillis(); + begin = Calendar.getInstance().getTimeInMillis(); - byte[] bytes = "foo bar!".getBytes(); - for (int n = 0; n <= TOTAL_OPERATIONS; n++) { - SafeEncoder.encode(bytes); - } + byte[] bytes = "foo bar!".getBytes(); + for (int n = 0; n <= TOTAL_OPERATIONS; n++) { + SafeEncoder.encode(bytes); + } - elapsed = Calendar.getInstance().getTimeInMillis() - begin; + elapsed = Calendar.getInstance().getTimeInMillis() - begin; - System.out.println(((1000 * TOTAL_OPERATIONS) / elapsed) - + " ops to build Strings"); + System.out.println(((1000 * TOTAL_OPERATIONS) / elapsed) + + " ops to build Strings"); } } \ No newline at end of file diff --git a/src/test/java/redis/clients/jedis/tests/benchmark/ShardedBenchmark.java b/src/test/java/redis/clients/jedis/tests/benchmark/ShardedBenchmark.java index 3fb63ff..ec5fed8 100644 --- a/src/test/java/redis/clients/jedis/tests/benchmark/ShardedBenchmark.java +++ b/src/test/java/redis/clients/jedis/tests/benchmark/ShardedBenchmark.java @@ -10,30 +10,30 @@ public class ShardedBenchmark { private static final int TOTAL_OPERATIONS = 10000000; public static void main(String[] args) throws UnknownHostException, - IOException { + IOException { - long begin = Calendar.getInstance().getTimeInMillis(); + long begin = Calendar.getInstance().getTimeInMillis(); - for (int n = 0; n <= TOTAL_OPERATIONS; n++) { - String key = "foo" + n; - Hashing.MD5.hash(key); - } + for (int n = 0; n <= TOTAL_OPERATIONS; n++) { + String key = "foo" + n; + Hashing.MD5.hash(key); + } - long elapsed = Calendar.getInstance().getTimeInMillis() - begin; + long elapsed = Calendar.getInstance().getTimeInMillis() - begin; - System.out.println(((1000 * TOTAL_OPERATIONS) / elapsed) + " MD5 ops"); + System.out.println(((1000 * TOTAL_OPERATIONS) / elapsed) + " MD5 ops"); - begin = Calendar.getInstance().getTimeInMillis(); + begin = Calendar.getInstance().getTimeInMillis(); - for (int n = 0; n <= TOTAL_OPERATIONS; n++) { - String key = "foo" + n; - Hashing.MURMUR_HASH.hash(key); - } + for (int n = 0; n <= TOTAL_OPERATIONS; n++) { + String key = "foo" + n; + Hashing.MURMUR_HASH.hash(key); + } - elapsed = Calendar.getInstance().getTimeInMillis() - begin; + elapsed = Calendar.getInstance().getTimeInMillis() - begin; - System.out.println(((1000 * TOTAL_OPERATIONS) / elapsed) - + " Murmur ops"); + System.out.println(((1000 * TOTAL_OPERATIONS) / elapsed) + + " Murmur ops"); } } \ No newline at end of file diff --git a/src/test/java/redis/clients/jedis/tests/commands/AllKindOfValuesCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/AllKindOfValuesCommandsTest.java index f0ee6bf..8fe2675 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/AllKindOfValuesCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/AllKindOfValuesCommandsTest.java @@ -6,6 +6,8 @@ import java.util.Set; import org.junit.Test; +import redis.clients.jedis.ScanParams; +import redis.clients.jedis.ScanResult; import redis.clients.jedis.exceptions.JedisDataException; import redis.clients.util.SafeEncoder; @@ -25,489 +27,520 @@ public class AllKindOfValuesCommandsTest extends JedisCommandTestBase { @Test public void ping() { - String status = jedis.ping(); - assertEquals("PONG", status); + String status = jedis.ping(); + assertEquals("PONG", status); } @Test public void exists() { - String status = jedis.set("foo", "bar"); - assertEquals("OK", status); + String status = jedis.set("foo", "bar"); + assertEquals("OK", status); - status = jedis.set(bfoo, bbar); - assertEquals("OK", status); + status = jedis.set(bfoo, bbar); + assertEquals("OK", status); - boolean reply = jedis.exists("foo"); - assertTrue(reply); + boolean reply = jedis.exists("foo"); + assertTrue(reply); - reply = jedis.exists(bfoo); - assertTrue(reply); + reply = jedis.exists(bfoo); + assertTrue(reply); - long lreply = jedis.del("foo"); - assertEquals(1, lreply); + long lreply = jedis.del("foo"); + assertEquals(1, lreply); - lreply = jedis.del(bfoo); - assertEquals(1, lreply); + lreply = jedis.del(bfoo); + assertEquals(1, lreply); - reply = jedis.exists("foo"); - assertFalse(reply); + reply = jedis.exists("foo"); + assertFalse(reply); - reply = jedis.exists(bfoo); - assertFalse(reply); + reply = jedis.exists(bfoo); + assertFalse(reply); } @Test public void del() { - jedis.set("foo1", "bar1"); - jedis.set("foo2", "bar2"); - jedis.set("foo3", "bar3"); + jedis.set("foo1", "bar1"); + jedis.set("foo2", "bar2"); + jedis.set("foo3", "bar3"); - long reply = jedis.del("foo1", "foo2", "foo3"); - assertEquals(3, reply); + long reply = jedis.del("foo1", "foo2", "foo3"); + assertEquals(3, reply); - Boolean breply = jedis.exists("foo1"); - assertFalse(breply); - breply = jedis.exists("foo2"); - assertFalse(breply); - breply = jedis.exists("foo3"); - assertFalse(breply); + Boolean breply = jedis.exists("foo1"); + assertFalse(breply); + breply = jedis.exists("foo2"); + assertFalse(breply); + breply = jedis.exists("foo3"); + assertFalse(breply); - jedis.set("foo1", "bar1"); + jedis.set("foo1", "bar1"); - reply = jedis.del("foo1", "foo2"); - assertEquals(1, reply); + reply = jedis.del("foo1", "foo2"); + assertEquals(1, reply); - reply = jedis.del("foo1", "foo2"); - assertEquals(0, reply); + reply = jedis.del("foo1", "foo2"); + assertEquals(0, reply); - // Binary ... - jedis.set(bfoo1, bbar1); - jedis.set(bfoo2, bbar2); - jedis.set(bfoo3, bbar3); + // Binary ... + jedis.set(bfoo1, bbar1); + jedis.set(bfoo2, bbar2); + jedis.set(bfoo3, bbar3); - reply = jedis.del(bfoo1, bfoo2, bfoo3); - assertEquals(3, reply); + reply = jedis.del(bfoo1, bfoo2, bfoo3); + assertEquals(3, reply); - breply = jedis.exists(bfoo1); - assertFalse(breply); - breply = jedis.exists(bfoo2); - assertFalse(breply); - breply = jedis.exists(bfoo3); - assertFalse(breply); + breply = jedis.exists(bfoo1); + assertFalse(breply); + breply = jedis.exists(bfoo2); + assertFalse(breply); + breply = jedis.exists(bfoo3); + assertFalse(breply); - jedis.set(bfoo1, bbar1); + jedis.set(bfoo1, bbar1); - reply = jedis.del(bfoo1, bfoo2); - assertEquals(1, reply); + reply = jedis.del(bfoo1, bfoo2); + assertEquals(1, reply); - reply = jedis.del(bfoo1, bfoo2); - assertEquals(0, reply); + reply = jedis.del(bfoo1, bfoo2); + assertEquals(0, reply); } @Test public void type() { - jedis.set("foo", "bar"); - String status = jedis.type("foo"); - assertEquals("string", status); + jedis.set("foo", "bar"); + String status = jedis.type("foo"); + assertEquals("string", status); - // Binary - jedis.set(bfoo, bbar); - status = jedis.type(bfoo); - assertEquals("string", status); + // Binary + jedis.set(bfoo, bbar); + status = jedis.type(bfoo); + assertEquals("string", status); } @Test public void keys() { - jedis.set("foo", "bar"); - jedis.set("foobar", "bar"); + jedis.set("foo", "bar"); + jedis.set("foobar", "bar"); - Set keys = jedis.keys("foo*"); - Set expected = new HashSet(); - expected.add("foo"); - expected.add("foobar"); - assertEquals(expected, keys); + Set keys = jedis.keys("foo*"); + Set expected = new HashSet(); + expected.add("foo"); + expected.add("foobar"); + assertEquals(expected, keys); - expected = new HashSet(); - keys = jedis.keys("bar*"); + expected = new HashSet(); + keys = jedis.keys("bar*"); - assertEquals(expected, keys); + assertEquals(expected, keys); - // Binary - jedis.set(bfoo, bbar); - jedis.set(bfoobar, bbar); + // Binary + jedis.set(bfoo, bbar); + jedis.set(bfoobar, bbar); - Set bkeys = jedis.keys(bfoostar); - assertEquals(2, bkeys.size()); - assertTrue(setContains(bkeys, bfoo)); - assertTrue(setContains(bkeys, bfoobar)); + Set bkeys = jedis.keys(bfoostar); + assertEquals(2, bkeys.size()); + assertTrue(setContains(bkeys, bfoo)); + assertTrue(setContains(bkeys, bfoobar)); - bkeys = jedis.keys(bbarstar); + bkeys = jedis.keys(bbarstar); - assertEquals(0, bkeys.size()); + assertEquals(0, bkeys.size()); } @Test public void randomKey() { - assertEquals(null, jedis.randomKey()); + assertEquals(null, jedis.randomKey()); - jedis.set("foo", "bar"); + jedis.set("foo", "bar"); - assertEquals("foo", jedis.randomKey()); + assertEquals("foo", jedis.randomKey()); - jedis.set("bar", "foo"); + jedis.set("bar", "foo"); - String randomkey = jedis.randomKey(); - assertTrue(randomkey.equals("foo") || randomkey.equals("bar")); + String randomkey = jedis.randomKey(); + assertTrue(randomkey.equals("foo") || randomkey.equals("bar")); - // Binary - jedis.del("foo"); - jedis.del("bar"); - assertEquals(null, jedis.randomKey()); + // Binary + jedis.del("foo"); + jedis.del("bar"); + assertEquals(null, jedis.randomKey()); - jedis.set(bfoo, bbar); + jedis.set(bfoo, bbar); - assertArrayEquals(bfoo, jedis.randomBinaryKey()); + assertArrayEquals(bfoo, jedis.randomBinaryKey()); - jedis.set(bbar, bfoo); + jedis.set(bbar, bfoo); - byte[] randomBkey = jedis.randomBinaryKey(); - assertTrue(Arrays.equals(randomBkey, bfoo) - || Arrays.equals(randomBkey, bbar)); + byte[] randomBkey = jedis.randomBinaryKey(); + assertTrue(Arrays.equals(randomBkey, bfoo) + || Arrays.equals(randomBkey, bbar)); } @Test public void rename() { - jedis.set("foo", "bar"); - String status = jedis.rename("foo", "bar"); - assertEquals("OK", status); + jedis.set("foo", "bar"); + String status = jedis.rename("foo", "bar"); + assertEquals("OK", status); - String value = jedis.get("foo"); - assertEquals(null, value); + String value = jedis.get("foo"); + assertEquals(null, value); - value = jedis.get("bar"); - assertEquals("bar", value); + value = jedis.get("bar"); + assertEquals("bar", value); - // Binary - jedis.set(bfoo, bbar); - String bstatus = jedis.rename(bfoo, bbar); - assertEquals("OK", bstatus); + // Binary + jedis.set(bfoo, bbar); + String bstatus = jedis.rename(bfoo, bbar); + assertEquals("OK", bstatus); - byte[] bvalue = jedis.get(bfoo); - assertEquals(null, bvalue); + byte[] bvalue = jedis.get(bfoo); + assertEquals(null, bvalue); - bvalue = jedis.get(bbar); - assertArrayEquals(bbar, bvalue); + bvalue = jedis.get(bbar); + assertArrayEquals(bbar, bvalue); } @Test public void renameOldAndNewAreTheSame() { - try { - jedis.set("foo", "bar"); - jedis.rename("foo", "foo"); - fail("JedisDataException expected"); - } catch (final JedisDataException e) { - } + try { + jedis.set("foo", "bar"); + jedis.rename("foo", "foo"); + fail("JedisDataException expected"); + } catch (final JedisDataException e) { + } - // Binary - try { - jedis.set(bfoo, bbar); - jedis.rename(bfoo, bfoo); - fail("JedisDataException expected"); - } catch (final JedisDataException e) { - } + // Binary + try { + jedis.set(bfoo, bbar); + jedis.rename(bfoo, bfoo); + fail("JedisDataException expected"); + } catch (final JedisDataException e) { + } } @Test public void renamenx() { - jedis.set("foo", "bar"); - long status = jedis.renamenx("foo", "bar"); - assertEquals(1, status); + jedis.set("foo", "bar"); + long status = jedis.renamenx("foo", "bar"); + assertEquals(1, status); - jedis.set("foo", "bar"); - status = jedis.renamenx("foo", "bar"); - assertEquals(0, status); + jedis.set("foo", "bar"); + status = jedis.renamenx("foo", "bar"); + assertEquals(0, status); - // Binary - jedis.set(bfoo, bbar); - long bstatus = jedis.renamenx(bfoo, bbar); - assertEquals(1, bstatus); + // Binary + jedis.set(bfoo, bbar); + long bstatus = jedis.renamenx(bfoo, bbar); + assertEquals(1, bstatus); - jedis.set(bfoo, bbar); - bstatus = jedis.renamenx(bfoo, bbar); - assertEquals(0, bstatus); + jedis.set(bfoo, bbar); + bstatus = jedis.renamenx(bfoo, bbar); + assertEquals(0, bstatus); } @Test public void dbSize() { - long size = jedis.dbSize(); - assertEquals(0, size); + long size = jedis.dbSize(); + assertEquals(0, size); - jedis.set("foo", "bar"); - size = jedis.dbSize(); - assertEquals(1, size); + jedis.set("foo", "bar"); + size = jedis.dbSize(); + assertEquals(1, size); - // Binary - jedis.set(bfoo, bbar); - size = jedis.dbSize(); - assertEquals(2, size); + // Binary + jedis.set(bfoo, bbar); + size = jedis.dbSize(); + assertEquals(2, size); } @Test public void expire() { - long status = jedis.expire("foo", 20); - assertEquals(0, status); + long status = jedis.expire("foo", 20); + assertEquals(0, status); - jedis.set("foo", "bar"); - status = jedis.expire("foo", 20); - assertEquals(1, status); + jedis.set("foo", "bar"); + status = jedis.expire("foo", 20); + assertEquals(1, status); - // Binary - long bstatus = jedis.expire(bfoo, 20); - assertEquals(0, bstatus); + // Binary + long bstatus = jedis.expire(bfoo, 20); + assertEquals(0, bstatus); - jedis.set(bfoo, bbar); - bstatus = jedis.expire(bfoo, 20); - assertEquals(1, bstatus); + jedis.set(bfoo, bbar); + bstatus = jedis.expire(bfoo, 20); + assertEquals(1, bstatus); } @Test public void expireAt() { - long unixTime = (System.currentTimeMillis() / 1000L) + 20; + long unixTime = (System.currentTimeMillis() / 1000L) + 20; - long status = jedis.expireAt("foo", unixTime); - assertEquals(0, status); + long status = jedis.expireAt("foo", unixTime); + assertEquals(0, status); - jedis.set("foo", "bar"); - unixTime = (System.currentTimeMillis() / 1000L) + 20; - status = jedis.expireAt("foo", unixTime); - assertEquals(1, status); + jedis.set("foo", "bar"); + unixTime = (System.currentTimeMillis() / 1000L) + 20; + status = jedis.expireAt("foo", unixTime); + assertEquals(1, status); - // Binary - long bstatus = jedis.expireAt(bfoo, unixTime); - assertEquals(0, bstatus); + // Binary + long bstatus = jedis.expireAt(bfoo, unixTime); + assertEquals(0, bstatus); - jedis.set(bfoo, bbar); - unixTime = (System.currentTimeMillis() / 1000L) + 20; - bstatus = jedis.expireAt(bfoo, unixTime); - assertEquals(1, bstatus); + jedis.set(bfoo, bbar); + unixTime = (System.currentTimeMillis() / 1000L) + 20; + bstatus = jedis.expireAt(bfoo, unixTime); + assertEquals(1, bstatus); } @Test public void ttl() { - // This is supposed to return -2 according to - // http://redis.io/commands/ttl - // and needs to be fixed in Redis. - long ttl = jedis.ttl("foo"); - assertEquals(-1, ttl); + long ttl = jedis.ttl("foo"); + assertEquals(-2, ttl); - jedis.set("foo", "bar"); - ttl = jedis.ttl("foo"); - assertEquals(-1, ttl); + jedis.set("foo", "bar"); + ttl = jedis.ttl("foo"); + assertEquals(-1, ttl); - jedis.expire("foo", 20); - ttl = jedis.ttl("foo"); - assertTrue(ttl >= 0 && ttl <= 20); + jedis.expire("foo", 20); + ttl = jedis.ttl("foo"); + assertTrue(ttl >= 0 && ttl <= 20); - // This is supposed to return -2 according to - // http://redis.io/commands/ttl - // and needs to be fixed in Redis. + // Binary + long bttl = jedis.ttl(bfoo); + assertEquals(-2, bttl); - // Binary - long bttl = jedis.ttl(bfoo); - assertEquals(-1, bttl); + jedis.set(bfoo, bbar); + bttl = jedis.ttl(bfoo); + assertEquals(-1, bttl); - jedis.set(bfoo, bbar); - bttl = jedis.ttl(bfoo); - assertEquals(-1, bttl); - - jedis.expire(bfoo, 20); - bttl = jedis.ttl(bfoo); - assertTrue(bttl >= 0 && bttl <= 20); + jedis.expire(bfoo, 20); + bttl = jedis.ttl(bfoo); + assertTrue(bttl >= 0 && bttl <= 20); } @Test public void select() { - jedis.set("foo", "bar"); - String status = jedis.select(1); - assertEquals("OK", status); - assertEquals(null, jedis.get("foo")); - status = jedis.select(0); - assertEquals("OK", status); - assertEquals("bar", jedis.get("foo")); - // Binary - jedis.set(bfoo, bbar); - String bstatus = jedis.select(1); - assertEquals("OK", bstatus); - assertEquals(null, jedis.get(bfoo)); - bstatus = jedis.select(0); - assertEquals("OK", bstatus); - assertArrayEquals(bbar, jedis.get(bfoo)); + jedis.set("foo", "bar"); + String status = jedis.select(1); + assertEquals("OK", status); + assertEquals(null, jedis.get("foo")); + status = jedis.select(0); + assertEquals("OK", status); + assertEquals("bar", jedis.get("foo")); + // Binary + jedis.set(bfoo, bbar); + String bstatus = jedis.select(1); + assertEquals("OK", bstatus); + assertEquals(null, jedis.get(bfoo)); + bstatus = jedis.select(0); + assertEquals("OK", bstatus); + assertArrayEquals(bbar, jedis.get(bfoo)); } @Test public void getDB() { - assertEquals(0, jedis.getDB().longValue()); - jedis.select(1); - assertEquals(1, jedis.getDB().longValue()); + assertEquals(0, jedis.getDB().longValue()); + jedis.select(1); + assertEquals(1, jedis.getDB().longValue()); } @Test public void move() { - long status = jedis.move("foo", 1); - assertEquals(0, status); + long status = jedis.move("foo", 1); + assertEquals(0, status); - jedis.set("foo", "bar"); - status = jedis.move("foo", 1); - assertEquals(1, status); - assertEquals(null, jedis.get("foo")); + jedis.set("foo", "bar"); + status = jedis.move("foo", 1); + assertEquals(1, status); + assertEquals(null, jedis.get("foo")); - jedis.select(1); - assertEquals("bar", jedis.get("foo")); + jedis.select(1); + assertEquals("bar", jedis.get("foo")); - // Binary - jedis.select(0); - long bstatus = jedis.move(bfoo, 1); - assertEquals(0, bstatus); + // Binary + jedis.select(0); + long bstatus = jedis.move(bfoo, 1); + assertEquals(0, bstatus); - jedis.set(bfoo, bbar); - bstatus = jedis.move(bfoo, 1); - assertEquals(1, bstatus); - assertEquals(null, jedis.get(bfoo)); + jedis.set(bfoo, bbar); + bstatus = jedis.move(bfoo, 1); + assertEquals(1, bstatus); + assertEquals(null, jedis.get(bfoo)); - jedis.select(1); - assertArrayEquals(bbar, jedis.get(bfoo)); + jedis.select(1); + assertArrayEquals(bbar, jedis.get(bfoo)); } @Test public void flushDB() { - jedis.set("foo", "bar"); - assertEquals(1, jedis.dbSize().intValue()); - jedis.set("bar", "foo"); - jedis.move("bar", 1); - String status = jedis.flushDB(); - assertEquals("OK", status); - assertEquals(0, jedis.dbSize().intValue()); - jedis.select(1); - assertEquals(1, jedis.dbSize().intValue()); - jedis.del("bar"); + jedis.set("foo", "bar"); + assertEquals(1, jedis.dbSize().intValue()); + jedis.set("bar", "foo"); + jedis.move("bar", 1); + String status = jedis.flushDB(); + assertEquals("OK", status); + assertEquals(0, jedis.dbSize().intValue()); + jedis.select(1); + assertEquals(1, jedis.dbSize().intValue()); + jedis.del("bar"); - // Binary - jedis.select(0); - jedis.set(bfoo, bbar); - assertEquals(1, jedis.dbSize().intValue()); - jedis.set(bbar, bfoo); - jedis.move(bbar, 1); - String bstatus = jedis.flushDB(); - assertEquals("OK", bstatus); - assertEquals(0, jedis.dbSize().intValue()); - jedis.select(1); - assertEquals(1, jedis.dbSize().intValue()); + // Binary + jedis.select(0); + jedis.set(bfoo, bbar); + assertEquals(1, jedis.dbSize().intValue()); + jedis.set(bbar, bfoo); + jedis.move(bbar, 1); + String bstatus = jedis.flushDB(); + assertEquals("OK", bstatus); + assertEquals(0, jedis.dbSize().intValue()); + jedis.select(1); + assertEquals(1, jedis.dbSize().intValue()); } @Test public void flushAll() { - jedis.set("foo", "bar"); - assertEquals(1, jedis.dbSize().intValue()); - jedis.set("bar", "foo"); - jedis.move("bar", 1); - String status = jedis.flushAll(); - assertEquals("OK", status); - assertEquals(0, jedis.dbSize().intValue()); - jedis.select(1); - assertEquals(0, jedis.dbSize().intValue()); + jedis.set("foo", "bar"); + assertEquals(1, jedis.dbSize().intValue()); + jedis.set("bar", "foo"); + jedis.move("bar", 1); + String status = jedis.flushAll(); + assertEquals("OK", status); + assertEquals(0, jedis.dbSize().intValue()); + jedis.select(1); + assertEquals(0, jedis.dbSize().intValue()); - // Binary - jedis.select(0); - jedis.set(bfoo, bbar); - assertEquals(1, jedis.dbSize().intValue()); - jedis.set(bbar, bfoo); - jedis.move(bbar, 1); - String bstatus = jedis.flushAll(); - assertEquals("OK", bstatus); - assertEquals(0, jedis.dbSize().intValue()); - jedis.select(1); - assertEquals(0, jedis.dbSize().intValue()); + // Binary + jedis.select(0); + jedis.set(bfoo, bbar); + assertEquals(1, jedis.dbSize().intValue()); + jedis.set(bbar, bfoo); + jedis.move(bbar, 1); + String bstatus = jedis.flushAll(); + assertEquals("OK", bstatus); + assertEquals(0, jedis.dbSize().intValue()); + jedis.select(1); + assertEquals(0, jedis.dbSize().intValue()); } @Test public void persist() { - jedis.setex("foo", 60 * 60, "bar"); - assertTrue(jedis.ttl("foo") > 0); - long status = jedis.persist("foo"); - assertEquals(1, status); - assertEquals(-1, jedis.ttl("foo").intValue()); + jedis.setex("foo", 60 * 60, "bar"); + assertTrue(jedis.ttl("foo") > 0); + long status = jedis.persist("foo"); + assertEquals(1, status); + assertEquals(-1, jedis.ttl("foo").intValue()); - // Binary - jedis.setex(bfoo, 60 * 60, bbar); - assertTrue(jedis.ttl(bfoo) > 0); - long bstatus = jedis.persist(bfoo); - assertEquals(1, bstatus); - assertEquals(-1, jedis.ttl(bfoo).intValue()); + // Binary + jedis.setex(bfoo, 60 * 60, bbar); + assertTrue(jedis.ttl(bfoo) > 0); + long bstatus = jedis.persist(bfoo); + assertEquals(1, bstatus); + assertEquals(-1, jedis.ttl(bfoo).intValue()); } @Test public void echo() { - String result = jedis.echo("hello world"); - assertEquals("hello world", result); + String result = jedis.echo("hello world"); + assertEquals("hello world", result); - // Binary - byte[] bresult = jedis.echo(SafeEncoder.encode("hello world")); - assertArrayEquals(SafeEncoder.encode("hello world"), bresult); + // Binary + byte[] bresult = jedis.echo(SafeEncoder.encode("hello world")); + assertArrayEquals(SafeEncoder.encode("hello world"), bresult); } - + @Test public void dumpAndRestore() { - jedis.set("foo1", "bar1"); - byte[] sv = jedis.dump("foo1"); - jedis.restore("foo2", 0, sv); - assertTrue(jedis.exists("foo2")); + jedis.set("foo1", "bar1"); + byte[] sv = jedis.dump("foo1"); + jedis.restore("foo2", 0, sv); + assertTrue(jedis.exists("foo2")); } - + @Test public void pexpire() { - long status = jedis.pexpire("foo", 10000); - assertEquals(0, status); + long status = jedis.pexpire("foo", 10000); + assertEquals(0, status); - jedis.set("foo", "bar"); - status = jedis.pexpire("foo", 10000); - assertEquals(1, status); + jedis.set("foo", "bar"); + status = jedis.pexpire("foo", 10000); + assertEquals(1, status); } - + @Test public void pexpireAt() { - long unixTime = (System.currentTimeMillis()) + 10000; + long unixTime = (System.currentTimeMillis()) + 10000; - long status = jedis.pexpireAt("foo", unixTime); - assertEquals(0, status); + long status = jedis.pexpireAt("foo", unixTime); + assertEquals(0, status); - jedis.set("foo", "bar"); - unixTime = (System.currentTimeMillis()) + 10000; - status = jedis.pexpireAt("foo", unixTime); - assertEquals(1, status); + jedis.set("foo", "bar"); + unixTime = (System.currentTimeMillis()) + 10000; + status = jedis.pexpireAt("foo", unixTime); + assertEquals(1, status); } - + @Test public void pttl() { - long pttl = jedis.pttl("foo"); - assertEquals(-1, pttl); + long pttl = jedis.pttl("foo"); + assertEquals(-2, pttl); - jedis.set("foo", "bar"); - pttl = jedis.pttl("foo"); - assertEquals(-1, pttl); + jedis.set("foo", "bar"); + pttl = jedis.pttl("foo"); + assertEquals(-1, pttl); - jedis.pexpire("foo", 20000); - pttl = jedis.pttl("foo"); - assertTrue(pttl >= 0 && pttl <= 20000); + jedis.pexpire("foo", 20000); + pttl = jedis.pttl("foo"); + assertTrue(pttl >= 0 && pttl <= 20000); } + @Test + public void scan() { + jedis.set("b", "b"); + jedis.set("a", "a"); + + ScanResult result = jedis.scan(0); + + assertEquals(0, result.getCursor()); + assertFalse(result.getResult().isEmpty()); + } + + @Test + public void scanMatch() { + ScanParams params = new ScanParams(); + params.match("a*"); + + jedis.set("b", "b"); + jedis.set("a", "a"); + jedis.set("aa", "aa"); + ScanResult result = jedis.scan(0, params); + + assertEquals(0, result.getCursor()); + assertFalse(result.getResult().isEmpty()); + } + + @Test + public void scanCount() { + ScanParams params = new ScanParams(); + params.count(2); + + for (int i = 0; i < 10; i++) { + jedis.set("a" + i, "a" + i); + } + + ScanResult result = jedis.scan(0, params); + + assertFalse(result.getResult().isEmpty()); + } } diff --git a/src/test/java/redis/clients/jedis/tests/commands/BinaryValuesCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/BinaryValuesCommandsTest.java index c232dbe..2a09268 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/BinaryValuesCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/BinaryValuesCommandsTest.java @@ -1,19 +1,20 @@ package redis.clients.jedis.tests.commands; -import org.junit.Before; -import org.junit.Test; -import redis.clients.jedis.Protocol.Keyword; -import redis.clients.jedis.exceptions.JedisDataException; - import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import org.junit.Before; +import org.junit.Test; + +import redis.clients.jedis.Protocol.Keyword; +import redis.clients.jedis.exceptions.JedisDataException; + public class BinaryValuesCommandsTest extends JedisCommandTestBase { byte[] bfoo = { 0x01, 0x02, 0x03, 0x04 }; byte[] bbar = { 0x05, 0x06, 0x07, 0x08 }; - byte[] bxx = { 0x78, 0x78 }; - byte[] bnx = { 0x6E, 0x78 }; + byte[] bxx = { 0x78, 0x78 }; + byte[] bnx = { 0x6E, 0x78 }; byte[] bex = { 0x65, 0x78 }; byte[] bpx = { 0x70, 0x78 }; long expireSeconds = 2; @@ -22,261 +23,260 @@ public class BinaryValuesCommandsTest extends JedisCommandTestBase { @Before public void startUp() { - StringBuilder sb = new StringBuilder(); + StringBuilder sb = new StringBuilder(); - for (int n = 0; n < 1000; n++) { - sb.append("A"); - } + for (int n = 0; n < 1000; n++) { + sb.append("A"); + } - binaryValue = sb.toString().getBytes(); + binaryValue = sb.toString().getBytes(); } @Test public void setAndGet() { - String status = jedis.set(bfoo, binaryValue); - assertTrue(Keyword.OK.name().equalsIgnoreCase(status)); + String status = jedis.set(bfoo, binaryValue); + assertTrue(Keyword.OK.name().equalsIgnoreCase(status)); - byte[] value = jedis.get(bfoo); - assertTrue(Arrays.equals(binaryValue, value)); + byte[] value = jedis.get(bfoo); + assertTrue(Arrays.equals(binaryValue, value)); - assertNull(jedis.get(bbar)); + assertNull(jedis.get(bbar)); } @Test public void setNxExAndGet() { - String status = jedis.set(bfoo, binaryValue, bnx, bex, expireSeconds); - assertTrue(Keyword.OK.name().equalsIgnoreCase(status)); - byte[] value = jedis.get(bfoo); - assertTrue(Arrays.equals(binaryValue, value)); + String status = jedis.set(bfoo, binaryValue, bnx, bex, expireSeconds); + assertTrue(Keyword.OK.name().equalsIgnoreCase(status)); + byte[] value = jedis.get(bfoo); + assertTrue(Arrays.equals(binaryValue, value)); - assertNull(jedis.get(bbar)); + assertNull(jedis.get(bbar)); } @Test public void setIfNotExistAndGet() { - String status= jedis.set(bfoo, binaryValue); - assertTrue(Keyword.OK.name().equalsIgnoreCase(status)); - // nx should fail if value exists - String statusFail = jedis.set(bfoo, binaryValue, bnx, bex, expireSeconds); - assertNull(statusFail); + String status = jedis.set(bfoo, binaryValue); + assertTrue(Keyword.OK.name().equalsIgnoreCase(status)); + // nx should fail if value exists + String statusFail = jedis.set(bfoo, binaryValue, bnx, bex, + expireSeconds); + assertNull(statusFail); - byte[] value = jedis.get(bfoo); - assertTrue(Arrays.equals(binaryValue, value)); + byte[] value = jedis.get(bfoo); + assertTrue(Arrays.equals(binaryValue, value)); - assertNull(jedis.get(bbar)); + assertNull(jedis.get(bbar)); } @Test public void setIfExistAndGet() { - String status= jedis.set(bfoo, binaryValue); - assertTrue(Keyword.OK.name().equalsIgnoreCase(status)); - // nx should fail if value exists - String statusSuccess = jedis.set(bfoo, binaryValue, bxx, bex, expireSeconds); - assertTrue(Keyword.OK.name().equalsIgnoreCase(statusSuccess)); + String status = jedis.set(bfoo, binaryValue); + assertTrue(Keyword.OK.name().equalsIgnoreCase(status)); + // nx should fail if value exists + String statusSuccess = jedis.set(bfoo, binaryValue, bxx, bex, + expireSeconds); + assertTrue(Keyword.OK.name().equalsIgnoreCase(statusSuccess)); - byte[] value = jedis.get(bfoo); - assertTrue(Arrays.equals(binaryValue, value)); + byte[] value = jedis.get(bfoo); + assertTrue(Arrays.equals(binaryValue, value)); - assertNull(jedis.get(bbar)); + assertNull(jedis.get(bbar)); } @Test public void setFailIfNotExistAndGet() { - // xx should fail if value does NOT exists - String statusFail = jedis.set(bfoo, binaryValue, bxx, bex, expireSeconds); - assertNull(statusFail); + // xx should fail if value does NOT exists + String statusFail = jedis.set(bfoo, binaryValue, bxx, bex, + expireSeconds); + assertNull(statusFail); } @Test public void setAndExpireMillis() { - String status = jedis.set(bfoo, binaryValue, bnx, bpx, expireMillis); - assertTrue(Keyword.OK.name().equalsIgnoreCase(status)); - long ttl = jedis.ttl(bfoo); - assertTrue(ttl > 0 && ttl <= expireSeconds); + String status = jedis.set(bfoo, binaryValue, bnx, bpx, expireMillis); + assertTrue(Keyword.OK.name().equalsIgnoreCase(status)); + long ttl = jedis.ttl(bfoo); + assertTrue(ttl > 0 && ttl <= expireSeconds); } - @Test public void setAndExpire() { - String status = jedis.set(bfoo, binaryValue, bnx, bex, expireSeconds); - assertTrue(Keyword.OK.name().equalsIgnoreCase(status)); - long ttl = jedis.ttl(bfoo); - assertTrue(ttl > 0 && ttl <= expireSeconds); + String status = jedis.set(bfoo, binaryValue, bnx, bex, expireSeconds); + assertTrue(Keyword.OK.name().equalsIgnoreCase(status)); + long ttl = jedis.ttl(bfoo); + assertTrue(ttl > 0 && ttl <= expireSeconds); } - @Test public void getSet() { - byte[] value = jedis.getSet(bfoo, binaryValue); - assertNull(value); - value = jedis.get(bfoo); - assertTrue(Arrays.equals(binaryValue, value)); + byte[] value = jedis.getSet(bfoo, binaryValue); + assertNull(value); + value = jedis.get(bfoo); + assertTrue(Arrays.equals(binaryValue, value)); } @Test public void mget() { - List values = jedis.mget(bfoo, bbar); - List expected = new ArrayList(); - expected.add(null); - expected.add(null); + List values = jedis.mget(bfoo, bbar); + List expected = new ArrayList(); + expected.add(null); + expected.add(null); - assertEquals(expected, values); + assertEquals(expected, values); - jedis.set(bfoo, binaryValue); + jedis.set(bfoo, binaryValue); - expected = new ArrayList(); - expected.add(binaryValue); - expected.add(null); - values = jedis.mget(bfoo, bbar); + expected = new ArrayList(); + expected.add(binaryValue); + expected.add(null); + values = jedis.mget(bfoo, bbar); - assertEquals(expected, values); + assertEquals(expected, values); - jedis.set(bbar, bfoo); + jedis.set(bbar, bfoo); - expected = new ArrayList(); - expected.add(binaryValue); - expected.add(bfoo); - values = jedis.mget(bfoo, bbar); + expected = new ArrayList(); + expected.add(binaryValue); + expected.add(bfoo); + values = jedis.mget(bfoo, bbar); - assertEquals(expected, values); + assertEquals(expected, values); } @Test public void setnx() { - long status = jedis.setnx(bfoo, binaryValue); - assertEquals(1, status); - assertTrue(Arrays.equals(binaryValue, jedis.get(bfoo))); + long status = jedis.setnx(bfoo, binaryValue); + assertEquals(1, status); + assertTrue(Arrays.equals(binaryValue, jedis.get(bfoo))); - status = jedis.setnx(bfoo, bbar); - assertEquals(0, status); - assertTrue(Arrays.equals(binaryValue, jedis.get(bfoo))); + status = jedis.setnx(bfoo, bbar); + assertEquals(0, status); + assertTrue(Arrays.equals(binaryValue, jedis.get(bfoo))); } @Test public void setex() { - String status = jedis.setex(bfoo, 20, binaryValue); - assertEquals(Keyword.OK.name(), status); - long ttl = jedis.ttl(bfoo); - assertTrue(ttl > 0 && ttl <= 20); + String status = jedis.setex(bfoo, 20, binaryValue); + assertEquals(Keyword.OK.name(), status); + long ttl = jedis.ttl(bfoo); + assertTrue(ttl > 0 && ttl <= 20); } @Test public void mset() { - String status = jedis.mset(bfoo, binaryValue, bbar, bfoo); - assertEquals(Keyword.OK.name(), status); - assertTrue(Arrays.equals(binaryValue, jedis.get(bfoo))); - assertTrue(Arrays.equals(bfoo, jedis.get(bbar))); + String status = jedis.mset(bfoo, binaryValue, bbar, bfoo); + assertEquals(Keyword.OK.name(), status); + assertTrue(Arrays.equals(binaryValue, jedis.get(bfoo))); + assertTrue(Arrays.equals(bfoo, jedis.get(bbar))); } @Test public void msetnx() { - long status = jedis.msetnx(bfoo, binaryValue, bbar, bfoo); - assertEquals(1, status); - assertTrue(Arrays.equals(binaryValue, jedis.get(bfoo))); - assertTrue(Arrays.equals(bfoo, jedis.get(bbar))); + long status = jedis.msetnx(bfoo, binaryValue, bbar, bfoo); + assertEquals(1, status); + assertTrue(Arrays.equals(binaryValue, jedis.get(bfoo))); + assertTrue(Arrays.equals(bfoo, jedis.get(bbar))); - status = jedis.msetnx(bfoo, bbar, "bar2".getBytes(), "foo2".getBytes()); - assertEquals(0, status); - assertTrue(Arrays.equals(binaryValue, jedis.get(bfoo))); - assertTrue(Arrays.equals(bfoo, jedis.get(bbar))); + status = jedis.msetnx(bfoo, bbar, "bar2".getBytes(), "foo2".getBytes()); + assertEquals(0, status); + assertTrue(Arrays.equals(binaryValue, jedis.get(bfoo))); + assertTrue(Arrays.equals(bfoo, jedis.get(bbar))); } @Test(expected = JedisDataException.class) public void incrWrongValue() { - jedis.set(bfoo, binaryValue); - jedis.incr(bfoo); + jedis.set(bfoo, binaryValue); + jedis.incr(bfoo); } @Test public void incr() { - long value = jedis.incr(bfoo); - assertEquals(1, value); - value = jedis.incr(bfoo); - assertEquals(2, value); + long value = jedis.incr(bfoo); + assertEquals(1, value); + value = jedis.incr(bfoo); + assertEquals(2, value); } @Test(expected = JedisDataException.class) public void incrByWrongValue() { - jedis.set(bfoo, binaryValue); - jedis.incrBy(bfoo, 2); + jedis.set(bfoo, binaryValue); + jedis.incrBy(bfoo, 2); } @Test public void incrBy() { - long value = jedis.incrBy(bfoo, 2); - assertEquals(2, value); - value = jedis.incrBy(bfoo, 2); - assertEquals(4, value); + long value = jedis.incrBy(bfoo, 2); + assertEquals(2, value); + value = jedis.incrBy(bfoo, 2); + assertEquals(4, value); } @Test(expected = JedisDataException.class) public void decrWrongValue() { - jedis.set(bfoo, binaryValue); - jedis.decr(bfoo); + jedis.set(bfoo, binaryValue); + jedis.decr(bfoo); } @Test public void decr() { - long value = jedis.decr(bfoo); - assertEquals(-1, value); - value = jedis.decr(bfoo); - assertEquals(-2, value); + long value = jedis.decr(bfoo); + assertEquals(-1, value); + value = jedis.decr(bfoo); + assertEquals(-2, value); } @Test(expected = JedisDataException.class) public void decrByWrongValue() { - jedis.set(bfoo, binaryValue); - jedis.decrBy(bfoo, 2); + jedis.set(bfoo, binaryValue); + jedis.decrBy(bfoo, 2); } @Test public void decrBy() { - long value = jedis.decrBy(bfoo, 2); - assertEquals(-2, value); - value = jedis.decrBy(bfoo, 2); - assertEquals(-4, value); + long value = jedis.decrBy(bfoo, 2); + assertEquals(-2, value); + value = jedis.decrBy(bfoo, 2); + assertEquals(-4, value); } @Test public void append() { - byte[] first512 = new byte[512]; - System.arraycopy(binaryValue, 0, first512, 0, 512); - long value = jedis.append(bfoo, first512); - assertEquals(512, value); - assertTrue(Arrays.equals(first512, jedis.get(bfoo))); + byte[] first512 = new byte[512]; + System.arraycopy(binaryValue, 0, first512, 0, 512); + long value = jedis.append(bfoo, first512); + assertEquals(512, value); + assertTrue(Arrays.equals(first512, jedis.get(bfoo))); - byte[] rest = new byte[binaryValue.length - 512]; - System.arraycopy(binaryValue, 512, rest, 0, binaryValue.length - 512); - value = jedis.append(bfoo, rest); - assertEquals(binaryValue.length, value); + byte[] rest = new byte[binaryValue.length - 512]; + System.arraycopy(binaryValue, 512, rest, 0, binaryValue.length - 512); + value = jedis.append(bfoo, rest); + assertEquals(binaryValue.length, value); - assertTrue(Arrays.equals(binaryValue, jedis.get(bfoo))); + assertTrue(Arrays.equals(binaryValue, jedis.get(bfoo))); } @Test public void substr() { - jedis.set(bfoo, binaryValue); + jedis.set(bfoo, binaryValue); - byte[] first512 = new byte[512]; - System.arraycopy(binaryValue, 0, first512, 0, 512); - byte[] rfirst512 = jedis.substr(bfoo, 0, 511); - assertTrue(Arrays.equals(first512, rfirst512)); + byte[] first512 = new byte[512]; + System.arraycopy(binaryValue, 0, first512, 0, 512); + byte[] rfirst512 = jedis.substr(bfoo, 0, 511); + assertTrue(Arrays.equals(first512, rfirst512)); - byte[] last512 = new byte[512]; - System - .arraycopy(binaryValue, binaryValue.length - 512, last512, 0, - 512); - assertTrue(Arrays.equals(last512, jedis.substr(bfoo, -512, -1))); + byte[] last512 = new byte[512]; + System.arraycopy(binaryValue, binaryValue.length - 512, last512, 0, 512); + assertTrue(Arrays.equals(last512, jedis.substr(bfoo, -512, -1))); - assertTrue(Arrays.equals(binaryValue, jedis.substr(bfoo, 0, -1))); + assertTrue(Arrays.equals(binaryValue, jedis.substr(bfoo, 0, -1))); - assertTrue(Arrays.equals(last512, jedis.substr(bfoo, - binaryValue.length - 512, 100000))); + assertTrue(Arrays.equals(last512, + jedis.substr(bfoo, binaryValue.length - 512, 100000))); } @Test public void strlen() { - jedis.set(bfoo, binaryValue); - assertEquals(binaryValue.length, jedis.strlen(bfoo).intValue()); + jedis.set(bfoo, binaryValue); + assertEquals(binaryValue.length, jedis.strlen(bfoo).intValue()); } } \ No newline at end of file diff --git a/src/test/java/redis/clients/jedis/tests/commands/BitCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/BitCommandsTest.java index 87b044f..fb14f21 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/BitCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/BitCommandsTest.java @@ -7,87 +7,85 @@ import redis.clients.jedis.BitOP; public class BitCommandsTest extends JedisCommandTestBase { @Test public void setAndgetbit() { - boolean bit = jedis.setbit("foo", 0, true); - assertEquals(false, bit); + boolean bit = jedis.setbit("foo", 0, true); + assertEquals(false, bit); - bit = jedis.getbit("foo", 0); - assertEquals(true, bit); + bit = jedis.getbit("foo", 0); + assertEquals(true, bit); - boolean bbit = jedis.setbit("bfoo".getBytes(), 0, "1".getBytes()); - assertFalse(bbit); + boolean bbit = jedis.setbit("bfoo".getBytes(), 0, "1".getBytes()); + assertFalse(bbit); - bbit = jedis.getbit("bfoo".getBytes(), 0); - assertTrue(bbit); + bbit = jedis.getbit("bfoo".getBytes(), 0); + assertTrue(bbit); } @Test public void setAndgetrange() { - jedis.set("key1", "Hello World"); - long reply = jedis.setrange("key1", 6, "Jedis"); - assertEquals(11, reply); + jedis.set("key1", "Hello World"); + long reply = jedis.setrange("key1", 6, "Jedis"); + assertEquals(11, reply); - assertEquals(jedis.get("key1"), "Hello Jedis"); + assertEquals(jedis.get("key1"), "Hello Jedis"); - assertEquals("Hello", jedis.getrange("key1", 0, 4)); - assertEquals("Jedis", jedis.getrange("key1", 6, 11)); + assertEquals("Hello", jedis.getrange("key1", 0, 4)); + assertEquals("Jedis", jedis.getrange("key1", 6, 11)); } @Test public void bitCount() { - jedis.del("foo"); + jedis.del("foo"); - jedis.setbit("foo", 16, true); - jedis.setbit("foo", 24, true); - jedis.setbit("foo", 40, true); - jedis.setbit("foo", 56, true); + jedis.setbit("foo", 16, true); + jedis.setbit("foo", 24, true); + jedis.setbit("foo", 40, true); + jedis.setbit("foo", 56, true); - long c4 = jedis.bitcount("foo"); - assertEquals(4, c4); + long c4 = jedis.bitcount("foo"); + assertEquals(4, c4); - long c3 = jedis.bitcount("foo", 2L, 5L); - assertEquals(3, c3); + long c3 = jedis.bitcount("foo", 2L, 5L); + assertEquals(3, c3); - jedis.del("foo"); + jedis.del("foo"); } @Test - public void bitOp() - { - jedis.set("key1", "\u0060"); - jedis.set("key2", "\u0044"); + public void bitOp() { + jedis.set("key1", "\u0060"); + jedis.set("key2", "\u0044"); - jedis.bitop(BitOP.AND, "resultAnd", "key1", "key2"); - String resultAnd = jedis.get("resultAnd"); - assertEquals("\u0040", resultAnd); + jedis.bitop(BitOP.AND, "resultAnd", "key1", "key2"); + String resultAnd = jedis.get("resultAnd"); + assertEquals("\u0040", resultAnd); - jedis.bitop(BitOP.OR, "resultOr", "key1", "key2"); - String resultOr = jedis.get("resultOr"); - assertEquals("\u0064", resultOr); + jedis.bitop(BitOP.OR, "resultOr", "key1", "key2"); + String resultOr = jedis.get("resultOr"); + assertEquals("\u0064", resultOr); - jedis.bitop(BitOP.XOR, "resultXor", "key1", "key2"); - String resultXor = jedis.get("resultXor"); - assertEquals("\u0024", resultXor); + jedis.bitop(BitOP.XOR, "resultXor", "key1", "key2"); + String resultXor = jedis.get("resultXor"); + assertEquals("\u0024", resultXor); - jedis.del("resultAnd"); - jedis.del("resultOr"); - jedis.del("resultXor"); - jedis.del("key1"); - jedis.del("key2"); + jedis.del("resultAnd"); + jedis.del("resultOr"); + jedis.del("resultXor"); + jedis.del("key1"); + jedis.del("key2"); } @Test - public void bitOpNot() - { - jedis.del("key"); - jedis.setbit("key", 0, true); - jedis.setbit("key", 4, true); + public void bitOpNot() { + jedis.del("key"); + jedis.setbit("key", 0, true); + jedis.setbit("key", 4, true); - jedis.bitop(BitOP.NOT, "resultNot", "key"); + jedis.bitop(BitOP.NOT, "resultNot", "key"); - String resultNot = jedis.get("resultNot"); - assertEquals("\u0077", resultNot); + String resultNot = jedis.get("resultNot"); + assertEquals("\u0077", resultNot); - jedis.del("key"); - jedis.del("resultNot"); + jedis.del("key"); + jedis.del("resultNot"); } } diff --git a/src/test/java/redis/clients/jedis/tests/commands/ClusterCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/ClusterCommandsTest.java new file mode 100644 index 0000000..d2bc584 --- /dev/null +++ b/src/test/java/redis/clients/jedis/tests/commands/ClusterCommandsTest.java @@ -0,0 +1,141 @@ +package redis.clients.jedis.tests.commands; + +import java.util.List; + +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.Test; + +import redis.clients.jedis.HostAndPort; +import redis.clients.jedis.Jedis; +import redis.clients.jedis.exceptions.JedisDataException; +import redis.clients.jedis.tests.HostAndPortUtil; +import redis.clients.jedis.tests.JedisTestBase; + +public class ClusterCommandsTest extends JedisTestBase { + private static Jedis node1; + private static Jedis node2; + + private HostAndPort nodeInfo1 = HostAndPortUtil.getClusterServers().get(0); + private HostAndPort nodeInfo2 = HostAndPortUtil.getClusterServers().get(1); + + @Before + public void setUp() throws Exception { + + node1 = new Jedis(nodeInfo1.getHost(), nodeInfo1.getPort()); + node1.connect(); + node1.flushAll(); + + node2 = new Jedis(nodeInfo2.getHost(), nodeInfo2.getPort()); + node2.connect(); + node2.flushAll(); + } + + @After + public void tearDown() { + node1.disconnect(); + node2.disconnect(); + } + + @AfterClass + public static void removeSlots() throws InterruptedException { + // This is to wait for gossip to replicate data. + waitForEqualClusterSize(); + String[] nodes = node1.clusterNodes().split("\n"); + String node1Id = nodes[0].split(" ")[0]; + node1.clusterDelSlots(1, 2, 3, 4, 5, 500); + node1.clusterSetSlotNode(5000, node1Id); + node1.clusterDelSlots(5000, 10000); + node1.clusterDelSlots(6000); + node2.clusterDelSlots(6000, 1, 2, 3, 4, 5, 500, 5000); + try { + node2.clusterDelSlots(10000); + } catch (JedisDataException jde) { + // Do nothing, slot may or may not be assigned depending on gossip + } + } + + private static void waitForEqualClusterSize() throws InterruptedException { + boolean notEqualSize = true; + while (notEqualSize) { + notEqualSize = getClusterAttribute(node1.clusterInfo(), + "cluster_known_nodes") == getClusterAttribute( + node2.clusterInfo(), "cluster_size") ? false : true; + } + } + + private static int getClusterAttribute(String clusterInfo, + String attributeName) { + for (String infoElement : clusterInfo.split("\n")) { + if (infoElement.contains(attributeName)) { + return Integer.valueOf(infoElement.split(":")[1].trim()); + } + } + return 0; + } + + @Test + public void clusterNodes() { + String nodes = node1.clusterNodes(); + assertTrue(nodes.split("\n").length > 0); + } + + @Test + public void clusterMeet() { + String status = node1.clusterMeet("127.0.0.1", nodeInfo2.getPort()); + assertEquals("OK", status); + } + + @Test + public void clusterAddSlots() { + String status = node1.clusterAddSlots(1, 2, 3, 4, 5); + assertEquals("OK", status); + } + + @Test + public void clusterDelSlots() { + node1.clusterAddSlots(900); + String status = node1.clusterDelSlots(900); + assertEquals("OK", status); + } + + @Test + public void clusterInfo() { + String info = node1.clusterInfo(); + assertNotNull(info); + } + + @Test + public void clusterGetKeysInSlot() { + node1.clusterAddSlots(500); + List keys = node1.clusterGetKeysInSlot(500, 1); + assertEquals(0, keys.size()); + } + + @Test + public void clusterSetSlotNode() { + String[] nodes = node1.clusterNodes().split("\n"); + String nodeId = nodes[0].split(" ")[0]; + String status = node1.clusterSetSlotNode(10000, nodeId); + assertEquals("OK", status); + } + + @Test + public void clusterSetSlotMigrating() { + node1.clusterAddSlots(5000); + String[] nodes = node1.clusterNodes().split("\n"); + String nodeId = nodes[0].split(" ")[0]; + String status = node1.clusterSetSlotMigrating(5000, nodeId); + assertEquals("OK", status); + } + + @Test + public void clusterSetSlotImporting() { + node2.clusterAddSlots(6000); + String[] nodes = node1.clusterNodes().split("\n"); + String nodeId = nodes[0].split(" ")[0]; + String status = node1.clusterSetSlotImporting(6000, nodeId); + assertEquals("OK", status); + } +} \ No newline at end of file diff --git a/src/test/java/redis/clients/jedis/tests/commands/ConnectionHandlingCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/ConnectionHandlingCommandsTest.java index 6b523fd..1201e8c 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/ConnectionHandlingCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/ConnectionHandlingCommandsTest.java @@ -3,20 +3,20 @@ package redis.clients.jedis.tests.commands; import org.junit.Test; import redis.clients.jedis.BinaryJedis; +import redis.clients.jedis.HostAndPort; import redis.clients.jedis.tests.HostAndPortUtil; -import redis.clients.jedis.tests.HostAndPortUtil.HostAndPort; public class ConnectionHandlingCommandsTest extends JedisCommandTestBase { protected static HostAndPort hnp = HostAndPortUtil.getRedisServers().get(0); @Test public void quit() { - assertEquals("OK", jedis.quit()); + assertEquals("OK", jedis.quit()); } @Test public void binary_quit() { - BinaryJedis bj = new BinaryJedis(hnp.host); - assertEquals("OK", bj.quit()); + BinaryJedis bj = new BinaryJedis(hnp.getHost()); + assertEquals("OK", bj.quit()); } } \ No newline at end of file diff --git a/src/test/java/redis/clients/jedis/tests/commands/ControlCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/ControlCommandsTest.java index 4ae64df..59ec6bc 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/ControlCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/ControlCommandsTest.java @@ -45,18 +45,8 @@ public class ControlCommandsTest extends JedisCommandTestBase { @Test public void lastsave() throws InterruptedException { - long before = jedis.lastsave(); - String st = ""; - while (!st.equals("OK")) { - try { - Thread.sleep(1000); - st = jedis.save(); - } catch (JedisDataException e) { - - } - } - long after = jedis.lastsave(); - assertTrue((after - before) > 0); + long saved = jedis.lastsave(); + assertTrue(saved > 0); } @Test @@ -71,16 +61,16 @@ public class ControlCommandsTest extends JedisCommandTestBase { public void monitor() { new Thread(new Runnable() { public void run() { - Jedis j = new Jedis("localhost"); - j.auth("foobared"); - for (int i = 0; i < 4; i++) { - j.incr("foobared"); - } try { - Thread.sleep(2500); + // sleep 100ms to make sure that monitor thread runs first + Thread.sleep(100); } catch (InterruptedException e) { } - j.incr("foobared"); + Jedis j = new Jedis("localhost"); + j.auth("foobared"); + for (int i = 0; i < 5; i++) { + j.incr("foobared"); + } j.disconnect(); } }).start(); @@ -127,4 +117,10 @@ public class ControlCommandsTest extends JedisCommandTestBase { resp = jedis.debug(DebugParams.RELOAD()); assertNotNull(resp); } + + @Test + public void waitReplicas() { + Long replicas = jedis.waitReplicas(1, 100); + assertEquals(1, replicas.longValue()); + } } \ No newline at end of file diff --git a/src/test/java/redis/clients/jedis/tests/commands/HashesCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/HashesCommandsTest.java index fbcbca3..1210259 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/HashesCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/HashesCommandsTest.java @@ -10,6 +10,9 @@ import java.util.Set; import org.junit.Test; +import redis.clients.jedis.ScanParams; +import redis.clients.jedis.ScanResult; + public class HashesCommandsTest extends JedisCommandTestBase { final byte[] bfoo = { 0x01, 0x02, 0x03, 0x04 }; final byte[] bbar = { 0x05, 0x06, 0x07, 0x08 }; @@ -17,273 +20,314 @@ public class HashesCommandsTest extends JedisCommandTestBase { @Test public void hset() { - long status = jedis.hset("foo", "bar", "car"); - assertEquals(1, status); - status = jedis.hset("foo", "bar", "foo"); - assertEquals(0, status); + long status = jedis.hset("foo", "bar", "car"); + assertEquals(1, status); + status = jedis.hset("foo", "bar", "foo"); + assertEquals(0, status); - // Binary - long bstatus = jedis.hset(bfoo, bbar, bcar); - assertEquals(1, bstatus); - bstatus = jedis.hset(bfoo, bbar, bfoo); - assertEquals(0, bstatus); + // Binary + long bstatus = jedis.hset(bfoo, bbar, bcar); + assertEquals(1, bstatus); + bstatus = jedis.hset(bfoo, bbar, bfoo); + assertEquals(0, bstatus); } @Test public void hget() { - jedis.hset("foo", "bar", "car"); - assertEquals(null, jedis.hget("bar", "foo")); - assertEquals(null, jedis.hget("foo", "car")); - assertEquals("car", jedis.hget("foo", "bar")); + jedis.hset("foo", "bar", "car"); + assertEquals(null, jedis.hget("bar", "foo")); + assertEquals(null, jedis.hget("foo", "car")); + assertEquals("car", jedis.hget("foo", "bar")); - // Binary - jedis.hset(bfoo, bbar, bcar); - assertEquals(null, jedis.hget(bbar, bfoo)); - assertEquals(null, jedis.hget(bfoo, bcar)); - assertArrayEquals(bcar, jedis.hget(bfoo, bbar)); + // Binary + jedis.hset(bfoo, bbar, bcar); + assertEquals(null, jedis.hget(bbar, bfoo)); + assertEquals(null, jedis.hget(bfoo, bcar)); + assertArrayEquals(bcar, jedis.hget(bfoo, bbar)); } @Test public void hsetnx() { - long status = jedis.hsetnx("foo", "bar", "car"); - assertEquals(1, status); - assertEquals("car", jedis.hget("foo", "bar")); + long status = jedis.hsetnx("foo", "bar", "car"); + assertEquals(1, status); + assertEquals("car", jedis.hget("foo", "bar")); - status = jedis.hsetnx("foo", "bar", "foo"); - assertEquals(0, status); - assertEquals("car", jedis.hget("foo", "bar")); + status = jedis.hsetnx("foo", "bar", "foo"); + assertEquals(0, status); + assertEquals("car", jedis.hget("foo", "bar")); - status = jedis.hsetnx("foo", "car", "bar"); - assertEquals(1, status); - assertEquals("bar", jedis.hget("foo", "car")); + status = jedis.hsetnx("foo", "car", "bar"); + assertEquals(1, status); + assertEquals("bar", jedis.hget("foo", "car")); - // Binary - long bstatus = jedis.hsetnx(bfoo, bbar, bcar); - assertEquals(1, bstatus); - assertArrayEquals(bcar, jedis.hget(bfoo, bbar)); + // Binary + long bstatus = jedis.hsetnx(bfoo, bbar, bcar); + assertEquals(1, bstatus); + assertArrayEquals(bcar, jedis.hget(bfoo, bbar)); - bstatus = jedis.hsetnx(bfoo, bbar, bfoo); - assertEquals(0, bstatus); - assertArrayEquals(bcar, jedis.hget(bfoo, bbar)); + bstatus = jedis.hsetnx(bfoo, bbar, bfoo); + assertEquals(0, bstatus); + assertArrayEquals(bcar, jedis.hget(bfoo, bbar)); - bstatus = jedis.hsetnx(bfoo, bcar, bbar); - assertEquals(1, bstatus); - assertArrayEquals(bbar, jedis.hget(bfoo, bcar)); + bstatus = jedis.hsetnx(bfoo, bcar, bbar); + assertEquals(1, bstatus); + assertArrayEquals(bbar, jedis.hget(bfoo, bcar)); } @Test public void hmset() { - Map hash = new HashMap(); - hash.put("bar", "car"); - hash.put("car", "bar"); - String status = jedis.hmset("foo", hash); - assertEquals("OK", status); - assertEquals("car", jedis.hget("foo", "bar")); - assertEquals("bar", jedis.hget("foo", "car")); + Map hash = new HashMap(); + hash.put("bar", "car"); + hash.put("car", "bar"); + String status = jedis.hmset("foo", hash); + assertEquals("OK", status); + assertEquals("car", jedis.hget("foo", "bar")); + assertEquals("bar", jedis.hget("foo", "car")); - // Binary - Map bhash = new HashMap(); - bhash.put(bbar, bcar); - bhash.put(bcar, bbar); - String bstatus = jedis.hmset(bfoo, bhash); - assertEquals("OK", bstatus); - assertArrayEquals(bcar, jedis.hget(bfoo, bbar)); - assertArrayEquals(bbar, jedis.hget(bfoo, bcar)); + // Binary + Map bhash = new HashMap(); + bhash.put(bbar, bcar); + bhash.put(bcar, bbar); + String bstatus = jedis.hmset(bfoo, bhash); + assertEquals("OK", bstatus); + assertArrayEquals(bcar, jedis.hget(bfoo, bbar)); + assertArrayEquals(bbar, jedis.hget(bfoo, bcar)); } @Test public void hmget() { - Map hash = new HashMap(); - hash.put("bar", "car"); - hash.put("car", "bar"); - jedis.hmset("foo", hash); + Map hash = new HashMap(); + hash.put("bar", "car"); + hash.put("car", "bar"); + jedis.hmset("foo", hash); - List values = jedis.hmget("foo", "bar", "car", "foo"); - List expected = new ArrayList(); - expected.add("car"); - expected.add("bar"); - expected.add(null); + List values = jedis.hmget("foo", "bar", "car", "foo"); + List expected = new ArrayList(); + expected.add("car"); + expected.add("bar"); + expected.add(null); - assertEquals(expected, values); + assertEquals(expected, values); - // Binary - Map bhash = new HashMap(); - bhash.put(bbar, bcar); - bhash.put(bcar, bbar); - jedis.hmset(bfoo, bhash); + // Binary + Map bhash = new HashMap(); + bhash.put(bbar, bcar); + bhash.put(bcar, bbar); + jedis.hmset(bfoo, bhash); - List bvalues = jedis.hmget(bfoo, bbar, bcar, bfoo); - List bexpected = new ArrayList(); - bexpected.add(bcar); - bexpected.add(bbar); - bexpected.add(null); + List bvalues = jedis.hmget(bfoo, bbar, bcar, bfoo); + List bexpected = new ArrayList(); + bexpected.add(bcar); + bexpected.add(bbar); + bexpected.add(null); - assertEquals(bexpected, bvalues); + assertEquals(bexpected, bvalues); } @Test public void hincrBy() { - long value = jedis.hincrBy("foo", "bar", 1); - assertEquals(1, value); - value = jedis.hincrBy("foo", "bar", -1); - assertEquals(0, value); - value = jedis.hincrBy("foo", "bar", -10); - assertEquals(-10, value); + long value = jedis.hincrBy("foo", "bar", 1); + assertEquals(1, value); + value = jedis.hincrBy("foo", "bar", -1); + assertEquals(0, value); + value = jedis.hincrBy("foo", "bar", -10); + assertEquals(-10, value); - // Binary - long bvalue = jedis.hincrBy(bfoo, bbar, 1); - assertEquals(1, bvalue); - bvalue = jedis.hincrBy(bfoo, bbar, -1); - assertEquals(0, bvalue); - bvalue = jedis.hincrBy(bfoo, bbar, -10); - assertEquals(-10, bvalue); + // Binary + long bvalue = jedis.hincrBy(bfoo, bbar, 1); + assertEquals(1, bvalue); + bvalue = jedis.hincrBy(bfoo, bbar, -1); + assertEquals(0, bvalue); + bvalue = jedis.hincrBy(bfoo, bbar, -10); + assertEquals(-10, bvalue); } @Test public void hexists() { - Map hash = new HashMap(); - hash.put("bar", "car"); - hash.put("car", "bar"); - jedis.hmset("foo", hash); + Map hash = new HashMap(); + hash.put("bar", "car"); + hash.put("car", "bar"); + jedis.hmset("foo", hash); - assertFalse(jedis.hexists("bar", "foo")); - assertFalse(jedis.hexists("foo", "foo")); - assertTrue(jedis.hexists("foo", "bar")); + assertFalse(jedis.hexists("bar", "foo")); + assertFalse(jedis.hexists("foo", "foo")); + assertTrue(jedis.hexists("foo", "bar")); - // Binary - Map bhash = new HashMap(); - bhash.put(bbar, bcar); - bhash.put(bcar, bbar); - jedis.hmset(bfoo, bhash); + // Binary + Map bhash = new HashMap(); + bhash.put(bbar, bcar); + bhash.put(bcar, bbar); + jedis.hmset(bfoo, bhash); - assertFalse(jedis.hexists(bbar, bfoo)); - assertFalse(jedis.hexists(bfoo, bfoo)); - assertTrue(jedis.hexists(bfoo, bbar)); + assertFalse(jedis.hexists(bbar, bfoo)); + assertFalse(jedis.hexists(bfoo, bfoo)); + assertTrue(jedis.hexists(bfoo, bbar)); } @Test public void hdel() { - Map hash = new HashMap(); - hash.put("bar", "car"); - hash.put("car", "bar"); - jedis.hmset("foo", hash); + Map hash = new HashMap(); + hash.put("bar", "car"); + hash.put("car", "bar"); + jedis.hmset("foo", hash); - assertEquals(0, jedis.hdel("bar", "foo").intValue()); - assertEquals(0, jedis.hdel("foo", "foo").intValue()); - assertEquals(1, jedis.hdel("foo", "bar").intValue()); - assertEquals(null, jedis.hget("foo", "bar")); + assertEquals(0, jedis.hdel("bar", "foo").intValue()); + assertEquals(0, jedis.hdel("foo", "foo").intValue()); + assertEquals(1, jedis.hdel("foo", "bar").intValue()); + assertEquals(null, jedis.hget("foo", "bar")); - // Binary - Map bhash = new HashMap(); - bhash.put(bbar, bcar); - bhash.put(bcar, bbar); - jedis.hmset(bfoo, bhash); + // Binary + Map bhash = new HashMap(); + bhash.put(bbar, bcar); + bhash.put(bcar, bbar); + jedis.hmset(bfoo, bhash); - assertEquals(0, jedis.hdel(bbar, bfoo).intValue()); - assertEquals(0, jedis.hdel(bfoo, bfoo).intValue()); - assertEquals(1, jedis.hdel(bfoo, bbar).intValue()); - assertEquals(null, jedis.hget(bfoo, bbar)); + assertEquals(0, jedis.hdel(bbar, bfoo).intValue()); + assertEquals(0, jedis.hdel(bfoo, bfoo).intValue()); + assertEquals(1, jedis.hdel(bfoo, bbar).intValue()); + assertEquals(null, jedis.hget(bfoo, bbar)); } @Test public void hlen() { - Map hash = new HashMap(); - hash.put("bar", "car"); - hash.put("car", "bar"); - jedis.hmset("foo", hash); + Map hash = new HashMap(); + hash.put("bar", "car"); + hash.put("car", "bar"); + jedis.hmset("foo", hash); - assertEquals(0, jedis.hlen("bar").intValue()); - assertEquals(2, jedis.hlen("foo").intValue()); + assertEquals(0, jedis.hlen("bar").intValue()); + assertEquals(2, jedis.hlen("foo").intValue()); - // Binary - Map bhash = new HashMap(); - bhash.put(bbar, bcar); - bhash.put(bcar, bbar); - jedis.hmset(bfoo, bhash); + // Binary + Map bhash = new HashMap(); + bhash.put(bbar, bcar); + bhash.put(bcar, bbar); + jedis.hmset(bfoo, bhash); - assertEquals(0, jedis.hlen(bbar).intValue()); - assertEquals(2, jedis.hlen(bfoo).intValue()); + assertEquals(0, jedis.hlen(bbar).intValue()); + assertEquals(2, jedis.hlen(bfoo).intValue()); } @Test public void hkeys() { - Map hash = new LinkedHashMap(); - hash.put("bar", "car"); - hash.put("car", "bar"); - jedis.hmset("foo", hash); + Map hash = new LinkedHashMap(); + hash.put("bar", "car"); + hash.put("car", "bar"); + jedis.hmset("foo", hash); - Set keys = jedis.hkeys("foo"); - Set expected = new LinkedHashSet(); - expected.add("bar"); - expected.add("car"); - assertEquals(expected, keys); + Set keys = jedis.hkeys("foo"); + Set expected = new LinkedHashSet(); + expected.add("bar"); + expected.add("car"); + assertEquals(expected, keys); - // Binary - Map bhash = new LinkedHashMap(); - bhash.put(bbar, bcar); - bhash.put(bcar, bbar); - jedis.hmset(bfoo, bhash); + // Binary + Map bhash = new LinkedHashMap(); + bhash.put(bbar, bcar); + bhash.put(bcar, bbar); + jedis.hmset(bfoo, bhash); - Set bkeys = jedis.hkeys(bfoo); - Set bexpected = new LinkedHashSet(); - bexpected.add(bbar); - bexpected.add(bcar); - assertEquals(bexpected, bkeys); + Set bkeys = jedis.hkeys(bfoo); + Set bexpected = new LinkedHashSet(); + bexpected.add(bbar); + bexpected.add(bcar); + assertEquals(bexpected, bkeys); } @Test public void hvals() { - Map hash = new LinkedHashMap(); - hash.put("bar", "car"); - hash.put("car", "bar"); - jedis.hmset("foo", hash); + Map hash = new LinkedHashMap(); + hash.put("bar", "car"); + hash.put("car", "bar"); + jedis.hmset("foo", hash); - List vals = jedis.hvals("foo"); - assertEquals(2, vals.size()); - assertTrue(vals.contains("bar")); - assertTrue(vals.contains("car")); + List vals = jedis.hvals("foo"); + assertEquals(2, vals.size()); + assertTrue(vals.contains("bar")); + assertTrue(vals.contains("car")); - // Binary - Map bhash = new LinkedHashMap(); - bhash.put(bbar, bcar); - bhash.put(bcar, bbar); - jedis.hmset(bfoo, bhash); + // Binary + Map bhash = new LinkedHashMap(); + bhash.put(bbar, bcar); + bhash.put(bcar, bbar); + jedis.hmset(bfoo, bhash); - List bvals = jedis.hvals(bfoo); + List bvals = jedis.hvals(bfoo); - assertEquals(2, bvals.size()); - assertTrue(arrayContains(bvals, bbar)); - assertTrue(arrayContains(bvals, bcar)); + assertEquals(2, bvals.size()); + assertTrue(arrayContains(bvals, bbar)); + assertTrue(arrayContains(bvals, bcar)); } @Test public void hgetAll() { - Map h = new HashMap(); - h.put("bar", "car"); - h.put("car", "bar"); - jedis.hmset("foo", h); + Map h = new HashMap(); + h.put("bar", "car"); + h.put("car", "bar"); + jedis.hmset("foo", h); - Map hash = jedis.hgetAll("foo"); - assertEquals(2, hash.size()); - assertEquals("car", hash.get("bar")); - assertEquals("bar", hash.get("car")); + Map hash = jedis.hgetAll("foo"); + assertEquals(2, hash.size()); + assertEquals("car", hash.get("bar")); + assertEquals("bar", hash.get("car")); - // Binary - Map bh = new HashMap(); - bh.put(bbar, bcar); - bh.put(bcar, bbar); - jedis.hmset(bfoo, bh); - Map bhash = jedis.hgetAll(bfoo); + // Binary + Map bh = new HashMap(); + bh.put(bbar, bcar); + bh.put(bcar, bbar); + jedis.hmset(bfoo, bh); + Map bhash = jedis.hgetAll(bfoo); - assertEquals(2, bhash.size()); - assertArrayEquals(bcar, bhash.get(bbar)); - assertArrayEquals(bbar, bhash.get(bcar)); + assertEquals(2, bhash.size()); + assertArrayEquals(bcar, bhash.get(bbar)); + assertArrayEquals(bbar, bhash.get(bcar)); + } + + @Test + public void hscan() { + jedis.hset("foo", "b", "b"); + jedis.hset("foo", "a", "a"); + + ScanResult> result = jedis.hscan("foo", 0); + + assertEquals(0, result.getCursor()); + assertFalse(result.getResult().isEmpty()); + } + + @Test + public void hscanMatch() { + ScanParams params = new ScanParams(); + params.match("a*"); + + jedis.hset("foo", "b", "b"); + jedis.hset("foo", "a", "a"); + jedis.hset("foo", "aa", "aa"); + ScanResult> result = jedis.hscan("foo", 0, + params); + + assertEquals(0, result.getCursor()); + assertFalse(result.getResult().isEmpty()); + } + + @Test + public void hscanCount() { + ScanParams params = new ScanParams(); + params.count(2); + + for (int i = 0; i < 10; i++) { + jedis.hset("foo", "a" + i, "a" + i); + } + + ScanResult> result = jedis.hscan("foo", 0, + params); + + assertFalse(result.getResult().isEmpty()); } } diff --git a/src/test/java/redis/clients/jedis/tests/commands/JedisCommandTestBase.java b/src/test/java/redis/clients/jedis/tests/commands/JedisCommandTestBase.java index 8d92c4c..c6f8d69 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/JedisCommandTestBase.java +++ b/src/test/java/redis/clients/jedis/tests/commands/JedisCommandTestBase.java @@ -1,95 +1,96 @@ package redis.clients.jedis.tests.commands; -import org.junit.After; -import org.junit.Before; -import org.junit.ComparisonFailure; -import redis.clients.jedis.Jedis; -import redis.clients.jedis.tests.HostAndPortUtil; -import redis.clients.jedis.tests.HostAndPortUtil.HostAndPort; -import redis.clients.jedis.tests.JedisTestBase; - import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.Set; +import org.junit.After; +import org.junit.Before; +import org.junit.ComparisonFailure; + +import redis.clients.jedis.HostAndPort; +import redis.clients.jedis.Jedis; +import redis.clients.jedis.tests.HostAndPortUtil; +import redis.clients.jedis.tests.JedisTestBase; + public abstract class JedisCommandTestBase extends JedisTestBase { protected static HostAndPort hnp = HostAndPortUtil.getRedisServers().get(0); protected Jedis jedis; public JedisCommandTestBase() { - super(); + super(); } @Before public void setUp() throws Exception { - jedis = new Jedis(hnp.host, hnp.port, 500); - jedis.connect(); - jedis.auth("foobared"); - jedis.configSet("timeout", "300"); - jedis.flushAll(); + jedis = new Jedis(hnp.getHost(), hnp.getPort(), 500); + jedis.connect(); + jedis.auth("foobared"); + jedis.configSet("timeout", "300"); + jedis.flushAll(); } @After public void tearDown() { - jedis.disconnect(); + jedis.disconnect(); } protected Jedis createJedis() { - Jedis j = new Jedis(hnp.host, hnp.port); - j.connect(); - j.auth("foobared"); - j.flushAll(); - return j; + Jedis j = new Jedis(hnp.getHost(), hnp.getPort()); + j.connect(); + j.auth("foobared"); + j.flushAll(); + return j; } protected void assertEquals(List expected, List actual) { - assertEquals(expected.size(), actual.size()); - for (int n = 0; n < expected.size(); n++) { - assertArrayEquals(expected.get(n), actual.get(n)); - } + assertEquals(expected.size(), actual.size()); + for (int n = 0; n < expected.size(); n++) { + assertArrayEquals(expected.get(n), actual.get(n)); + } } protected void assertEquals(Set expected, Set actual) { - assertEquals(expected.size(), actual.size()); - Iterator e = expected.iterator(); - while (e.hasNext()) { - byte[] next = e.next(); - boolean contained = false; - for (byte[] element : expected) { - if (Arrays.equals(next, element)) { - contained = true; - } - } - if (!contained) { - throw new ComparisonFailure("element is missing", - Arrays.toString(next), actual.toString()); - } - } + assertEquals(expected.size(), actual.size()); + Iterator e = expected.iterator(); + while (e.hasNext()) { + byte[] next = e.next(); + boolean contained = false; + for (byte[] element : expected) { + if (Arrays.equals(next, element)) { + contained = true; + } + } + if (!contained) { + throw new ComparisonFailure("element is missing", + Arrays.toString(next), actual.toString()); + } + } } protected boolean arrayContains(List array, byte[] expected) { - for (byte[] a : array) { - try { - assertArrayEquals(a, expected); - return true; - } catch (AssertionError e) { + for (byte[] a : array) { + try { + assertArrayEquals(a, expected); + return true; + } catch (AssertionError e) { - } - } - return false; + } + } + return false; } protected boolean setContains(Set set, byte[] expected) { - for (byte[] a : set) { - try { - assertArrayEquals(a, expected); - return true; - } catch (AssertionError e) { + for (byte[] a : set) { + try { + assertArrayEquals(a, expected); + return true; + } catch (AssertionError e) { - } - } - return false; + } + } + return false; } } diff --git a/src/test/java/redis/clients/jedis/tests/commands/ListCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/ListCommandsTest.java index 5653687..ce157d8 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/ListCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/ListCommandsTest.java @@ -26,607 +26,559 @@ public class ListCommandsTest extends JedisCommandTestBase { @Test public void rpush() { - long size = jedis.rpush("foo", "bar"); - assertEquals(1, size); - size = jedis.rpush("foo", "foo"); - assertEquals(2, size); - size = jedis.rpush("foo", "bar", "foo"); - assertEquals(4, size); - + long size = jedis.rpush("foo", "bar"); + assertEquals(1, size); + size = jedis.rpush("foo", "foo"); + assertEquals(2, size); + size = jedis.rpush("foo", "bar", "foo"); + assertEquals(4, size); - // Binary - long bsize = jedis.rpush(bfoo, bbar); - assertEquals(1, bsize); - bsize = jedis.rpush(bfoo, bfoo); - assertEquals(2, bsize); - bsize = jedis.rpush(bfoo, bbar, bfoo); - assertEquals(4, bsize); + // Binary + long bsize = jedis.rpush(bfoo, bbar); + assertEquals(1, bsize); + bsize = jedis.rpush(bfoo, bfoo); + assertEquals(2, bsize); + bsize = jedis.rpush(bfoo, bbar, bfoo); + assertEquals(4, bsize); } @Test public void lpush() { - long size = jedis.lpush("foo", "bar"); - assertEquals(1, size); - size = jedis.lpush("foo", "foo"); - assertEquals(2, size); - size = jedis.lpush("foo", "bar", "foo"); - assertEquals(4, size); + long size = jedis.lpush("foo", "bar"); + assertEquals(1, size); + size = jedis.lpush("foo", "foo"); + assertEquals(2, size); + size = jedis.lpush("foo", "bar", "foo"); + assertEquals(4, size); - // Binary - long bsize = jedis.lpush(bfoo, bbar); - assertEquals(1, bsize); - bsize = jedis.lpush(bfoo, bfoo); - assertEquals(2, bsize); - bsize = jedis.lpush(bfoo, bbar, bfoo); - assertEquals(4, bsize); + // Binary + long bsize = jedis.lpush(bfoo, bbar); + assertEquals(1, bsize); + bsize = jedis.lpush(bfoo, bfoo); + assertEquals(2, bsize); + bsize = jedis.lpush(bfoo, bbar, bfoo); + assertEquals(4, bsize); } @Test public void llen() { - assertEquals(0, jedis.llen("foo").intValue()); - jedis.lpush("foo", "bar"); - jedis.lpush("foo", "car"); - assertEquals(2, jedis.llen("foo").intValue()); + assertEquals(0, jedis.llen("foo").intValue()); + jedis.lpush("foo", "bar"); + jedis.lpush("foo", "car"); + assertEquals(2, jedis.llen("foo").intValue()); - // Binary - assertEquals(0, jedis.llen(bfoo).intValue()); - jedis.lpush(bfoo, bbar); - jedis.lpush(bfoo, bcar); - assertEquals(2, jedis.llen(bfoo).intValue()); + // Binary + assertEquals(0, jedis.llen(bfoo).intValue()); + jedis.lpush(bfoo, bbar); + jedis.lpush(bfoo, bcar); + assertEquals(2, jedis.llen(bfoo).intValue()); } @Test public void llenNotOnList() { - try { - jedis.set("foo", "bar"); - jedis.llen("foo"); - fail("JedisDataException expected"); - } catch (final JedisDataException e) { - } + try { + jedis.set("foo", "bar"); + jedis.llen("foo"); + fail("JedisDataException expected"); + } catch (final JedisDataException e) { + } - // Binary - try { - jedis.set(bfoo, bbar); - jedis.llen(bfoo); - fail("JedisDataException expected"); - } catch (final JedisDataException e) { - } + // Binary + try { + jedis.set(bfoo, bbar); + jedis.llen(bfoo); + fail("JedisDataException expected"); + } catch (final JedisDataException e) { + } } @Test public void lrange() { - jedis.rpush("foo", "a"); - jedis.rpush("foo", "b"); - jedis.rpush("foo", "c"); + jedis.rpush("foo", "a"); + jedis.rpush("foo", "b"); + jedis.rpush("foo", "c"); - List expected = new ArrayList(); - expected.add("a"); - expected.add("b"); - expected.add("c"); + List expected = new ArrayList(); + expected.add("a"); + expected.add("b"); + expected.add("c"); - List range = jedis.lrange("foo", 0, 2); - assertEquals(expected, range); + List range = jedis.lrange("foo", 0, 2); + assertEquals(expected, range); - range = jedis.lrange("foo", 0, 20); - assertEquals(expected, range); + range = jedis.lrange("foo", 0, 20); + assertEquals(expected, range); - expected = new ArrayList(); - expected.add("b"); - expected.add("c"); + expected = new ArrayList(); + expected.add("b"); + expected.add("c"); - range = jedis.lrange("foo", 1, 2); - assertEquals(expected, range); + range = jedis.lrange("foo", 1, 2); + assertEquals(expected, range); - expected = new ArrayList(); - range = jedis.lrange("foo", 2, 1); - assertEquals(expected, range); + expected = new ArrayList(); + range = jedis.lrange("foo", 2, 1); + assertEquals(expected, range); - // Binary - jedis.rpush(bfoo, bA); - jedis.rpush(bfoo, bB); - jedis.rpush(bfoo, bC); + // Binary + jedis.rpush(bfoo, bA); + jedis.rpush(bfoo, bB); + jedis.rpush(bfoo, bC); - List bexpected = new ArrayList(); - bexpected.add(bA); - bexpected.add(bB); - bexpected.add(bC); + List bexpected = new ArrayList(); + bexpected.add(bA); + bexpected.add(bB); + bexpected.add(bC); - List brange = jedis.lrange(bfoo, 0, 2); - assertEquals(bexpected, brange); + List brange = jedis.lrange(bfoo, 0, 2); + assertEquals(bexpected, brange); - brange = jedis.lrange(bfoo, 0, 20); - assertEquals(bexpected, brange); + brange = jedis.lrange(bfoo, 0, 20); + assertEquals(bexpected, brange); - bexpected = new ArrayList(); - bexpected.add(bB); - bexpected.add(bC); + bexpected = new ArrayList(); + bexpected.add(bB); + bexpected.add(bC); - brange = jedis.lrange(bfoo, 1, 2); - assertEquals(bexpected, brange); + brange = jedis.lrange(bfoo, 1, 2); + assertEquals(bexpected, brange); - bexpected = new ArrayList(); - brange = jedis.lrange(bfoo, 2, 1); - assertEquals(bexpected, brange); + bexpected = new ArrayList(); + brange = jedis.lrange(bfoo, 2, 1); + assertEquals(bexpected, brange); } @Test public void ltrim() { - jedis.lpush("foo", "1"); - jedis.lpush("foo", "2"); - jedis.lpush("foo", "3"); - String status = jedis.ltrim("foo", 0, 1); + jedis.lpush("foo", "1"); + jedis.lpush("foo", "2"); + jedis.lpush("foo", "3"); + String status = jedis.ltrim("foo", 0, 1); - List expected = new ArrayList(); - expected.add("3"); - expected.add("2"); + List expected = new ArrayList(); + expected.add("3"); + expected.add("2"); - assertEquals("OK", status); - assertEquals(2, jedis.llen("foo").intValue()); - assertEquals(expected, jedis.lrange("foo", 0, 100)); + assertEquals("OK", status); + assertEquals(2, jedis.llen("foo").intValue()); + assertEquals(expected, jedis.lrange("foo", 0, 100)); - // Binary - jedis.lpush(bfoo, b1); - jedis.lpush(bfoo, b2); - jedis.lpush(bfoo, b3); - String bstatus = jedis.ltrim(bfoo, 0, 1); + // Binary + jedis.lpush(bfoo, b1); + jedis.lpush(bfoo, b2); + jedis.lpush(bfoo, b3); + String bstatus = jedis.ltrim(bfoo, 0, 1); - List bexpected = new ArrayList(); - bexpected.add(b3); - bexpected.add(b2); + List bexpected = new ArrayList(); + bexpected.add(b3); + bexpected.add(b2); - assertEquals("OK", bstatus); - assertEquals(2, jedis.llen(bfoo).intValue()); - assertEquals(bexpected, jedis.lrange(bfoo, 0, 100)); + assertEquals("OK", bstatus); + assertEquals(2, jedis.llen(bfoo).intValue()); + assertEquals(bexpected, jedis.lrange(bfoo, 0, 100)); } @Test public void lindex() { - jedis.lpush("foo", "1"); - jedis.lpush("foo", "2"); - jedis.lpush("foo", "3"); + jedis.lpush("foo", "1"); + jedis.lpush("foo", "2"); + jedis.lpush("foo", "3"); - List expected = new ArrayList(); - expected.add("3"); - expected.add("bar"); - expected.add("1"); + List expected = new ArrayList(); + expected.add("3"); + expected.add("bar"); + expected.add("1"); - String status = jedis.lset("foo", 1, "bar"); + String status = jedis.lset("foo", 1, "bar"); - assertEquals("OK", status); - assertEquals(expected, jedis.lrange("foo", 0, 100)); + assertEquals("OK", status); + assertEquals(expected, jedis.lrange("foo", 0, 100)); - // Binary - jedis.lpush(bfoo, b1); - jedis.lpush(bfoo, b2); - jedis.lpush(bfoo, b3); + // Binary + jedis.lpush(bfoo, b1); + jedis.lpush(bfoo, b2); + jedis.lpush(bfoo, b3); - List bexpected = new ArrayList(); - bexpected.add(b3); - bexpected.add(bbar); - bexpected.add(b1); + List bexpected = new ArrayList(); + bexpected.add(b3); + bexpected.add(bbar); + bexpected.add(b1); - String bstatus = jedis.lset(bfoo, 1, bbar); + String bstatus = jedis.lset(bfoo, 1, bbar); - assertEquals("OK", bstatus); - assertEquals(bexpected, jedis.lrange(bfoo, 0, 100)); + assertEquals("OK", bstatus); + assertEquals(bexpected, jedis.lrange(bfoo, 0, 100)); } @Test public void lset() { - jedis.lpush("foo", "1"); - jedis.lpush("foo", "2"); - jedis.lpush("foo", "3"); + jedis.lpush("foo", "1"); + jedis.lpush("foo", "2"); + jedis.lpush("foo", "3"); - assertEquals("3", jedis.lindex("foo", 0)); - assertEquals(null, jedis.lindex("foo", 100)); + assertEquals("3", jedis.lindex("foo", 0)); + assertEquals(null, jedis.lindex("foo", 100)); - // Binary - jedis.lpush(bfoo, b1); - jedis.lpush(bfoo, b2); - jedis.lpush(bfoo, b3); + // Binary + jedis.lpush(bfoo, b1); + jedis.lpush(bfoo, b2); + jedis.lpush(bfoo, b3); - assertArrayEquals(b3, jedis.lindex(bfoo, 0)); - assertEquals(null, jedis.lindex(bfoo, 100)); + assertArrayEquals(b3, jedis.lindex(bfoo, 0)); + assertEquals(null, jedis.lindex(bfoo, 100)); } @Test public void lrem() { - jedis.lpush("foo", "hello"); - jedis.lpush("foo", "hello"); - jedis.lpush("foo", "x"); - jedis.lpush("foo", "hello"); - jedis.lpush("foo", "c"); - jedis.lpush("foo", "b"); - jedis.lpush("foo", "a"); + jedis.lpush("foo", "hello"); + jedis.lpush("foo", "hello"); + jedis.lpush("foo", "x"); + jedis.lpush("foo", "hello"); + jedis.lpush("foo", "c"); + jedis.lpush("foo", "b"); + jedis.lpush("foo", "a"); - long count = jedis.lrem("foo", -2, "hello"); + long count = jedis.lrem("foo", -2, "hello"); - List expected = new ArrayList(); - expected.add("a"); - expected.add("b"); - expected.add("c"); - expected.add("hello"); - expected.add("x"); + List expected = new ArrayList(); + expected.add("a"); + expected.add("b"); + expected.add("c"); + expected.add("hello"); + expected.add("x"); - assertEquals(2, count); - assertEquals(expected, jedis.lrange("foo", 0, 1000)); - assertEquals(0, jedis.lrem("bar", 100, "foo").intValue()); + assertEquals(2, count); + assertEquals(expected, jedis.lrange("foo", 0, 1000)); + assertEquals(0, jedis.lrem("bar", 100, "foo").intValue()); - // Binary - jedis.lpush(bfoo, bhello); - jedis.lpush(bfoo, bhello); - jedis.lpush(bfoo, bx); - jedis.lpush(bfoo, bhello); - jedis.lpush(bfoo, bC); - jedis.lpush(bfoo, bB); - jedis.lpush(bfoo, bA); + // Binary + jedis.lpush(bfoo, bhello); + jedis.lpush(bfoo, bhello); + jedis.lpush(bfoo, bx); + jedis.lpush(bfoo, bhello); + jedis.lpush(bfoo, bC); + jedis.lpush(bfoo, bB); + jedis.lpush(bfoo, bA); - long bcount = jedis.lrem(bfoo, -2, bhello); + long bcount = jedis.lrem(bfoo, -2, bhello); - List bexpected = new ArrayList(); - bexpected.add(bA); - bexpected.add(bB); - bexpected.add(bC); - bexpected.add(bhello); - bexpected.add(bx); + List bexpected = new ArrayList(); + bexpected.add(bA); + bexpected.add(bB); + bexpected.add(bC); + bexpected.add(bhello); + bexpected.add(bx); - assertEquals(2, bcount); - assertEquals(bexpected, jedis.lrange(bfoo, 0, 1000)); - assertEquals(0, jedis.lrem(bbar, 100, bfoo).intValue()); + assertEquals(2, bcount); + assertEquals(bexpected, jedis.lrange(bfoo, 0, 1000)); + assertEquals(0, jedis.lrem(bbar, 100, bfoo).intValue()); } @Test public void lpop() { - jedis.rpush("foo", "a"); - jedis.rpush("foo", "b"); - jedis.rpush("foo", "c"); + jedis.rpush("foo", "a"); + jedis.rpush("foo", "b"); + jedis.rpush("foo", "c"); - String element = jedis.lpop("foo"); - assertEquals("a", element); + String element = jedis.lpop("foo"); + assertEquals("a", element); - List expected = new ArrayList(); - expected.add("b"); - expected.add("c"); + List expected = new ArrayList(); + expected.add("b"); + expected.add("c"); - assertEquals(expected, jedis.lrange("foo", 0, 1000)); - jedis.lpop("foo"); - jedis.lpop("foo"); + assertEquals(expected, jedis.lrange("foo", 0, 1000)); + jedis.lpop("foo"); + jedis.lpop("foo"); - element = jedis.lpop("foo"); - assertEquals(null, element); + element = jedis.lpop("foo"); + assertEquals(null, element); - // Binary - jedis.rpush(bfoo, bA); - jedis.rpush(bfoo, bB); - jedis.rpush(bfoo, bC); + // Binary + jedis.rpush(bfoo, bA); + jedis.rpush(bfoo, bB); + jedis.rpush(bfoo, bC); - byte[] belement = jedis.lpop(bfoo); - assertArrayEquals(bA, belement); + byte[] belement = jedis.lpop(bfoo); + assertArrayEquals(bA, belement); - List bexpected = new ArrayList(); - bexpected.add(bB); - bexpected.add(bC); + List bexpected = new ArrayList(); + bexpected.add(bB); + bexpected.add(bC); - assertEquals(bexpected, jedis.lrange(bfoo, 0, 1000)); - jedis.lpop(bfoo); - jedis.lpop(bfoo); + assertEquals(bexpected, jedis.lrange(bfoo, 0, 1000)); + jedis.lpop(bfoo); + jedis.lpop(bfoo); - belement = jedis.lpop(bfoo); - assertEquals(null, belement); + belement = jedis.lpop(bfoo); + assertEquals(null, belement); } @Test public void rpop() { - jedis.rpush("foo", "a"); - jedis.rpush("foo", "b"); - jedis.rpush("foo", "c"); + jedis.rpush("foo", "a"); + jedis.rpush("foo", "b"); + jedis.rpush("foo", "c"); - String element = jedis.rpop("foo"); - assertEquals("c", element); + String element = jedis.rpop("foo"); + assertEquals("c", element); - List expected = new ArrayList(); - expected.add("a"); - expected.add("b"); + List expected = new ArrayList(); + expected.add("a"); + expected.add("b"); - assertEquals(expected, jedis.lrange("foo", 0, 1000)); - jedis.rpop("foo"); - jedis.rpop("foo"); + assertEquals(expected, jedis.lrange("foo", 0, 1000)); + jedis.rpop("foo"); + jedis.rpop("foo"); - element = jedis.rpop("foo"); - assertEquals(null, element); + element = jedis.rpop("foo"); + assertEquals(null, element); - // Binary - jedis.rpush(bfoo, bA); - jedis.rpush(bfoo, bB); - jedis.rpush(bfoo, bC); + // Binary + jedis.rpush(bfoo, bA); + jedis.rpush(bfoo, bB); + jedis.rpush(bfoo, bC); - byte[] belement = jedis.rpop(bfoo); - assertArrayEquals(bC, belement); + byte[] belement = jedis.rpop(bfoo); + assertArrayEquals(bC, belement); - List bexpected = new ArrayList(); - bexpected.add(bA); - bexpected.add(bB); + List bexpected = new ArrayList(); + bexpected.add(bA); + bexpected.add(bB); - assertEquals(bexpected, jedis.lrange(bfoo, 0, 1000)); - jedis.rpop(bfoo); - jedis.rpop(bfoo); + assertEquals(bexpected, jedis.lrange(bfoo, 0, 1000)); + jedis.rpop(bfoo); + jedis.rpop(bfoo); - belement = jedis.rpop(bfoo); - assertEquals(null, belement); + belement = jedis.rpop(bfoo); + assertEquals(null, belement); } @Test public void rpoplpush() { - jedis.rpush("foo", "a"); - jedis.rpush("foo", "b"); - jedis.rpush("foo", "c"); + jedis.rpush("foo", "a"); + jedis.rpush("foo", "b"); + jedis.rpush("foo", "c"); - jedis.rpush("dst", "foo"); - jedis.rpush("dst", "bar"); + jedis.rpush("dst", "foo"); + jedis.rpush("dst", "bar"); - String element = jedis.rpoplpush("foo", "dst"); + String element = jedis.rpoplpush("foo", "dst"); - assertEquals("c", element); + assertEquals("c", element); - List srcExpected = new ArrayList(); - srcExpected.add("a"); - srcExpected.add("b"); + List srcExpected = new ArrayList(); + srcExpected.add("a"); + srcExpected.add("b"); - List dstExpected = new ArrayList(); - dstExpected.add("c"); - dstExpected.add("foo"); - dstExpected.add("bar"); + List dstExpected = new ArrayList(); + dstExpected.add("c"); + dstExpected.add("foo"); + dstExpected.add("bar"); - assertEquals(srcExpected, jedis.lrange("foo", 0, 1000)); - assertEquals(dstExpected, jedis.lrange("dst", 0, 1000)); + assertEquals(srcExpected, jedis.lrange("foo", 0, 1000)); + assertEquals(dstExpected, jedis.lrange("dst", 0, 1000)); - // Binary - jedis.rpush(bfoo, bA); - jedis.rpush(bfoo, bB); - jedis.rpush(bfoo, bC); + // Binary + jedis.rpush(bfoo, bA); + jedis.rpush(bfoo, bB); + jedis.rpush(bfoo, bC); - jedis.rpush(bdst, bfoo); - jedis.rpush(bdst, bbar); + jedis.rpush(bdst, bfoo); + jedis.rpush(bdst, bbar); - byte[] belement = jedis.rpoplpush(bfoo, bdst); + byte[] belement = jedis.rpoplpush(bfoo, bdst); - assertArrayEquals(bC, belement); + assertArrayEquals(bC, belement); - List bsrcExpected = new ArrayList(); - bsrcExpected.add(bA); - bsrcExpected.add(bB); + List bsrcExpected = new ArrayList(); + bsrcExpected.add(bA); + bsrcExpected.add(bB); - List bdstExpected = new ArrayList(); - bdstExpected.add(bC); - bdstExpected.add(bfoo); - bdstExpected.add(bbar); + List bdstExpected = new ArrayList(); + bdstExpected.add(bC); + bdstExpected.add(bfoo); + bdstExpected.add(bbar); - assertEquals(bsrcExpected, jedis.lrange(bfoo, 0, 1000)); - assertEquals(bdstExpected, jedis.lrange(bdst, 0, 1000)); + assertEquals(bsrcExpected, jedis.lrange(bfoo, 0, 1000)); + assertEquals(bdstExpected, jedis.lrange(bdst, 0, 1000)); } @Test public void blpop() throws InterruptedException { - List result = jedis.blpop(1, "foo"); - assertNull(result); + List result = jedis.blpop(1, "foo"); + assertNull(result); - new Thread(new Runnable() { - public void run() { - try { - Jedis j = createJedis(); - j.lpush("foo", "bar"); - j.disconnect(); - } catch (Exception ex) { - fail(ex.getMessage()); - } - } - }).start(); + jedis.lpush("foo", "bar"); + result = jedis.blpop(1, "foo"); - result = jedis.blpop(1, "foo"); - assertNotNull(result); - assertEquals(2, result.size()); - assertEquals("foo", result.get(0)); - assertEquals("bar", result.get(1)); + assertNotNull(result); + assertEquals(2, result.size()); + assertEquals("foo", result.get(0)); + assertEquals("bar", result.get(1)); - // Binary - List bresult = jedis.blpop(1, bfoo); - assertNull(bresult); + // Binary + jedis.lpush(bfoo, bbar); + List bresult = jedis.blpop(1, bfoo); - new Thread(new Runnable() { - public void run() { - try { - Jedis j = createJedis(); - j.lpush(bfoo, bbar); - j.disconnect(); - } catch (Exception ex) { - fail(ex.getMessage()); - } - } - }).start(); - - bresult = jedis.blpop(1, bfoo); - assertNotNull(bresult); - assertEquals(2, bresult.size()); - assertArrayEquals(bfoo, bresult.get(0)); - assertArrayEquals(bbar, bresult.get(1)); + assertNotNull(bresult); + assertEquals(2, bresult.size()); + assertArrayEquals(bfoo, bresult.get(0)); + assertArrayEquals(bbar, bresult.get(1)); } @Test public void brpop() throws InterruptedException { - List result = jedis.brpop(1, "foo"); - assertNull(result); + List result = jedis.brpop(1, "foo"); + assertNull(result); - new Thread(new Runnable() { - public void run() { - try { - Jedis j = createJedis(); - j.lpush("foo", "bar"); - j.disconnect(); - } catch (Exception ex) { - fail(ex.getMessage()); - } - } - }).start(); + jedis.lpush("foo", "bar"); + result = jedis.brpop(1, "foo"); + assertNotNull(result); + assertEquals(2, result.size()); + assertEquals("foo", result.get(0)); + assertEquals("bar", result.get(1)); - result = jedis.brpop(1, "foo"); - assertNotNull(result); - assertEquals(2, result.size()); - assertEquals("foo", result.get(0)); - assertEquals("bar", result.get(1)); + // Binary - // Binary - List bresult = jedis.brpop(1, bfoo); - assertNull(bresult); - - new Thread(new Runnable() { - public void run() { - try { - Jedis j = createJedis(); - j.lpush(bfoo, bbar); - j.disconnect(); - } catch (Exception ex) { - fail(ex.getMessage()); - } - } - }).start(); - - bresult = jedis.brpop(1, bfoo); - assertNotNull(bresult); - assertEquals(2, bresult.size()); - assertArrayEquals(bfoo, bresult.get(0)); - assertArrayEquals(bbar, bresult.get(1)); + jedis.lpush(bfoo, bbar); + List bresult = jedis.brpop(1, bfoo); + assertNotNull(bresult); + assertEquals(2, bresult.size()); + assertArrayEquals(bfoo, bresult.get(0)); + assertArrayEquals(bbar, bresult.get(1)); } @Test public void lpushx() { - long status = jedis.lpushx("foo", "bar"); - assertEquals(0, status); + long status = jedis.lpushx("foo", "bar"); + assertEquals(0, status); - jedis.lpush("foo", "a"); - status = jedis.lpushx("foo", "b"); - assertEquals(2, status); + jedis.lpush("foo", "a"); + status = jedis.lpushx("foo", "b"); + assertEquals(2, status); - // Binary - long bstatus = jedis.lpushx(bfoo, bbar); - assertEquals(0, bstatus); + // Binary + long bstatus = jedis.lpushx(bfoo, bbar); + assertEquals(0, bstatus); - jedis.lpush(bfoo, bA); - bstatus = jedis.lpushx(bfoo, bB); - assertEquals(2, bstatus); + jedis.lpush(bfoo, bA); + bstatus = jedis.lpushx(bfoo, bB); + assertEquals(2, bstatus); } @Test public void rpushx() { - long status = jedis.rpushx("foo", "bar"); - assertEquals(0, status); + long status = jedis.rpushx("foo", "bar"); + assertEquals(0, status); - jedis.lpush("foo", "a"); - status = jedis.rpushx("foo", "b"); - assertEquals(2, status); + jedis.lpush("foo", "a"); + status = jedis.rpushx("foo", "b"); + assertEquals(2, status); - // Binary - long bstatus = jedis.rpushx(bfoo, bbar); - assertEquals(0, bstatus); + // Binary + long bstatus = jedis.rpushx(bfoo, bbar); + assertEquals(0, bstatus); - jedis.lpush(bfoo, bA); - bstatus = jedis.rpushx(bfoo, bB); - assertEquals(2, bstatus); + jedis.lpush(bfoo, bA); + bstatus = jedis.rpushx(bfoo, bB); + assertEquals(2, bstatus); } @Test public void linsert() { - long status = jedis.linsert("foo", Client.LIST_POSITION.BEFORE, "bar", - "car"); - assertEquals(0, status); + long status = jedis.linsert("foo", Client.LIST_POSITION.BEFORE, "bar", + "car"); + assertEquals(0, status); - jedis.lpush("foo", "a"); - status = jedis.linsert("foo", Client.LIST_POSITION.AFTER, "a", "b"); - assertEquals(2, status); + jedis.lpush("foo", "a"); + status = jedis.linsert("foo", Client.LIST_POSITION.AFTER, "a", "b"); + assertEquals(2, status); - List actual = jedis.lrange("foo", 0, 100); - List expected = new ArrayList(); - expected.add("a"); - expected.add("b"); + List actual = jedis.lrange("foo", 0, 100); + List expected = new ArrayList(); + expected.add("a"); + expected.add("b"); - assertEquals(expected, actual); + assertEquals(expected, actual); - status = jedis - .linsert("foo", Client.LIST_POSITION.BEFORE, "bar", "car"); - assertEquals(-1, status); + status = jedis + .linsert("foo", Client.LIST_POSITION.BEFORE, "bar", "car"); + assertEquals(-1, status); - // Binary - long bstatus = jedis.linsert(bfoo, Client.LIST_POSITION.BEFORE, bbar, - bcar); - assertEquals(0, bstatus); + // Binary + long bstatus = jedis.linsert(bfoo, Client.LIST_POSITION.BEFORE, bbar, + bcar); + assertEquals(0, bstatus); - jedis.lpush(bfoo, bA); - bstatus = jedis.linsert(bfoo, Client.LIST_POSITION.AFTER, bA, bB); - assertEquals(2, bstatus); + jedis.lpush(bfoo, bA); + bstatus = jedis.linsert(bfoo, Client.LIST_POSITION.AFTER, bA, bB); + assertEquals(2, bstatus); - List bactual = jedis.lrange(bfoo, 0, 100); - List bexpected = new ArrayList(); - bexpected.add(bA); - bexpected.add(bB); + List bactual = jedis.lrange(bfoo, 0, 100); + List bexpected = new ArrayList(); + bexpected.add(bA); + bexpected.add(bB); - assertEquals(bexpected, bactual); + assertEquals(bexpected, bactual); - bstatus = jedis.linsert(bfoo, Client.LIST_POSITION.BEFORE, bbar, bcar); - assertEquals(-1, bstatus); + bstatus = jedis.linsert(bfoo, Client.LIST_POSITION.BEFORE, bbar, bcar); + assertEquals(-1, bstatus); } @Test public void brpoplpush() { - (new Thread(new Runnable() { - public void run() { - try { - Thread.sleep(2000); - Jedis j = createJedis(); - j.lpush("foo", "a"); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - })).start(); + (new Thread(new Runnable() { + public void run() { + try { + Thread.sleep(100); + Jedis j = createJedis(); + j.lpush("foo", "a"); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + })).start(); - String element = jedis.brpoplpush("foo", "bar", 0); + String element = jedis.brpoplpush("foo", "bar", 0); - assertEquals("a", element); - assertEquals(1, jedis.llen("bar").longValue()); - assertEquals("a", jedis.lrange("bar", 0, -1).get(0)); + assertEquals("a", element); + assertEquals(1, jedis.llen("bar").longValue()); + assertEquals("a", jedis.lrange("bar", 0, -1).get(0)); - (new Thread(new Runnable() { - public void run() { - try { - Thread.sleep(100); - Jedis j = createJedis(); - j.lpush("foo", "a"); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - })).start(); + (new Thread(new Runnable() { + public void run() { + try { + Thread.sleep(100); + Jedis j = createJedis(); + j.lpush("foo", "a"); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + })).start(); - byte[] brpoplpush = jedis.brpoplpush("foo".getBytes(), - "bar".getBytes(), 0); + byte[] brpoplpush = jedis.brpoplpush("foo".getBytes(), + "bar".getBytes(), 0); - assertTrue(Arrays.equals("a".getBytes(), brpoplpush)); - assertEquals(1, jedis.llen("bar").longValue()); - assertEquals("a", jedis.lrange("bar", 0, -1).get(0)); + assertTrue(Arrays.equals("a".getBytes(), brpoplpush)); + assertEquals(1, jedis.llen("bar").longValue()); + assertEquals("a", jedis.lrange("bar", 0, -1).get(0)); } } diff --git a/src/test/java/redis/clients/jedis/tests/commands/ObjectCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/ObjectCommandsTest.java index 0713753..1da4331 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/ObjectCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/ObjectCommandsTest.java @@ -36,14 +36,11 @@ public class ObjectCommandsTest extends JedisCommandTestBase { public void objectIdletime() throws InterruptedException { jedis.lpush(key, "hello world"); - // Wait a little bit more than 10 seconds so the idle time is 10 - // seconds. - Thread.sleep(10001); Long time = jedis.objectIdletime(key); - assertEquals(new Long(10), time); + assertEquals(new Long(0), time); // Binary time = jedis.objectIdletime(binaryKey); - assertEquals(new Long(10), time); + assertEquals(new Long(0), time); } } \ No newline at end of file diff --git a/src/test/java/redis/clients/jedis/tests/commands/PublishSubscribeCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/PublishSubscribeCommandsTest.java index c7a94f4..5149ff2 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/PublishSubscribeCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/PublishSubscribeCommandsTest.java @@ -3,529 +3,578 @@ package redis.clients.jedis.tests.commands; import java.io.IOException; import java.net.UnknownHostException; import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicBoolean; -import org.junit.Ignore; import org.junit.Test; import redis.clients.jedis.BinaryJedisPubSub; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPubSub; import redis.clients.jedis.exceptions.JedisConnectionException; -import redis.clients.jedis.exceptions.JedisDataException; import redis.clients.util.SafeEncoder; public class PublishSubscribeCommandsTest extends JedisCommandTestBase { + private void publishOne(final String channel, final String message) { + Thread t = new Thread(new Runnable() { + public void run() { + try { + Jedis j = createJedis(); + j.publish(channel, message); + j.disconnect(); + } catch (Exception ex) { + } + } + }); + t.start(); + } + @Test public void subscribe() throws InterruptedException { - Thread t = new Thread(new Runnable() { - public void run() { - try { - Jedis j = createJedis(); - Thread.sleep(1000); - j.publish("foo", "exit"); - j.disconnect(); - } catch (Exception ex) { - fail(ex.getMessage()); - } - } - }); - t.start(); - jedis.subscribe(new JedisPubSub() { - public void onMessage(String channel, String message) { - assertEquals("foo", channel); - assertEquals("exit", message); - unsubscribe(); - } + jedis.subscribe(new JedisPubSub() { + public void onMessage(String channel, String message) { + assertEquals("foo", channel); + assertEquals("exit", message); + unsubscribe(); + } - public void onSubscribe(String channel, int subscribedChannels) { - assertEquals("foo", channel); - assertEquals(1, subscribedChannels); - } + public void onSubscribe(String channel, int subscribedChannels) { + assertEquals("foo", channel); + assertEquals(1, subscribedChannels); - public void onUnsubscribe(String channel, int subscribedChannels) { - assertEquals("foo", channel); - assertEquals(0, subscribedChannels); - } + // now that I'm subscribed... publish + publishOne("foo", "exit"); + } - public void onPSubscribe(String pattern, int subscribedChannels) { - } + public void onUnsubscribe(String channel, int subscribedChannels) { + assertEquals("foo", channel); + assertEquals(0, subscribedChannels); + } - public void onPUnsubscribe(String pattern, int subscribedChannels) { - } + public void onPSubscribe(String pattern, int subscribedChannels) { + } - public void onPMessage(String pattern, String channel, - String message) { - } - }, "foo"); - t.join(); + public void onPUnsubscribe(String pattern, int subscribedChannels) { + } + + public void onPMessage(String pattern, String channel, + String message) { + } + }, "foo"); + } + + + @Test + public void pubSubChannels(){ + final List expectedActiveChannels = Arrays.asList("testchan1", "testchan2", "testchan3"); + jedis.subscribe(new JedisPubSub() { + private int count = 0; + + @Override + public void onUnsubscribe(String channel, int subscribedChannels) { + } + + @Override + public void onSubscribe(String channel, int subscribedChannels) { + count++; + //All channels are subscribed + if (count == 3) { + Jedis otherJedis = createJedis(); + List activeChannels = otherJedis.pubsubChannels("test*"); + assertTrue(expectedActiveChannels.containsAll(activeChannels)); + unsubscribe(); + } + } + + @Override + public void onPUnsubscribe(String pattern, int subscribedChannels) { + } + + @Override + public void onPSubscribe(String pattern, int subscribedChannels) { + } + + @Override + public void onPMessage(String pattern, String channel, String message) { + } + + @Override + public void onMessage(String channel, String message) { + } + }, "testchan1", "testchan2", "testchan3"); + } + + @Test + public void pubSubNumPat(){ + jedis.psubscribe(new JedisPubSub() { + private int count=0; + @Override + public void onUnsubscribe(String channel, int subscribedChannels) { + } + + @Override + public void onSubscribe(String channel, int subscribedChannels) { + } + + @Override + public void onPUnsubscribe(String pattern, int subscribedChannels) { + } + + @Override + public void onPSubscribe(String pattern, int subscribedChannels) { + count++; + if (count == 3) { + Jedis otherJedis = createJedis(); + Long numPatterns = otherJedis.pubsubNumPat(); + assertEquals(new Long(2l), numPatterns); + punsubscribe(); + } + } + + @Override + public void onPMessage(String pattern, String channel, String message) { + } + + @Override + public void onMessage(String channel, String message) { + } + }, "test*", "test*", "chan*"); + } + + @Test + public void pubSubNumSub(){ + final Map expectedNumSub = new HashMap(); + expectedNumSub.put("testchannel2", "1"); + expectedNumSub.put("testchannel1", "1"); + jedis.subscribe(new JedisPubSub() { + private int count=0; + @Override + public void onUnsubscribe(String channel, int subscribedChannels) { + } + + @Override + public void onSubscribe(String channel, int subscribedChannels) { + count++; + if (count == 2) { + Jedis otherJedis = createJedis(); + Map numSub = otherJedis.pubsubNumSub("testchannel1", "testchannel2"); + assertEquals(expectedNumSub, numSub); + unsubscribe(); + } + } + + @Override + public void onPUnsubscribe(String pattern, int subscribedChannels) { + } + + @Override + public void onPSubscribe(String pattern, int subscribedChannels) { + } + + @Override + public void onPMessage(String pattern, String channel, String message) { + } + + @Override + public void onMessage(String channel, String message) { + } + }, "testchannel1", "testchannel2"); } @Test public void subscribeMany() throws UnknownHostException, IOException, - InterruptedException { - Thread t = new Thread(new Runnable() { - public void run() { - try { - Jedis j = createJedis(); - Thread.sleep(1000); - j.publish("foo", "exit"); - Thread.sleep(1000); - j.publish("bar", "exit"); - j.disconnect(); - } catch (Exception ex) { - fail(ex.getMessage()); - } - } - }); - t.start(); - jedis.subscribe(new JedisPubSub() { - public void onMessage(String channel, String message) { - unsubscribe(channel); - } + InterruptedException { + jedis.subscribe(new JedisPubSub() { + public void onMessage(String channel, String message) { + unsubscribe(channel); + } - public void onSubscribe(String channel, int subscribedChannels) { - } + public void onSubscribe(String channel, int subscribedChannels) { + publishOne(channel, "exit"); + } - public void onUnsubscribe(String channel, int subscribedChannels) { - } + public void onUnsubscribe(String channel, int subscribedChannels) { + } - public void onPSubscribe(String pattern, int subscribedChannels) { - } + public void onPSubscribe(String pattern, int subscribedChannels) { + } - public void onPUnsubscribe(String pattern, int subscribedChannels) { - } + public void onPUnsubscribe(String pattern, int subscribedChannels) { + } - public void onPMessage(String pattern, String channel, - String message) { - } - }, "foo", "bar"); - t.join(); + public void onPMessage(String pattern, String channel, + String message) { + } + }, "foo", "bar"); } @Test public void psubscribe() throws UnknownHostException, IOException, - InterruptedException { - Thread t = new Thread(new Runnable() { - public void run() { - try { - Jedis j = createJedis(); - Thread.sleep(1000); - j.publish("foo.bar", "exit"); - j.disconnect(); - } catch (Exception ex) { - fail(ex.getMessage()); - } - } - }); - t.start(); - jedis.psubscribe(new JedisPubSub() { - public void onMessage(String channel, String message) { - } + InterruptedException { + jedis.psubscribe(new JedisPubSub() { + public void onMessage(String channel, String message) { + } - public void onSubscribe(String channel, int subscribedChannels) { - } + public void onSubscribe(String channel, int subscribedChannels) { + } - public void onUnsubscribe(String channel, int subscribedChannels) { - } + public void onUnsubscribe(String channel, int subscribedChannels) { + } - public void onPSubscribe(String pattern, int subscribedChannels) { - assertEquals("foo.*", pattern); - assertEquals(1, subscribedChannels); - } + public void onPSubscribe(String pattern, int subscribedChannels) { + assertEquals("foo.*", pattern); + assertEquals(1, subscribedChannels); + publishOne("foo.bar", "exit"); - public void onPUnsubscribe(String pattern, int subscribedChannels) { - assertEquals("foo.*", pattern); - assertEquals(0, subscribedChannels); - } + } - public void onPMessage(String pattern, String channel, - String message) { - assertEquals("foo.*", pattern); - assertEquals("foo.bar", channel); - assertEquals("exit", message); - punsubscribe(); - } - }, "foo.*"); - t.join(); + public void onPUnsubscribe(String pattern, int subscribedChannels) { + assertEquals("foo.*", pattern); + assertEquals(0, subscribedChannels); + } + + public void onPMessage(String pattern, String channel, + String message) { + assertEquals("foo.*", pattern); + assertEquals("foo.bar", channel); + assertEquals("exit", message); + punsubscribe(); + } + }, "foo.*"); } @Test public void psubscribeMany() throws UnknownHostException, IOException, - InterruptedException { - Thread t = new Thread(new Runnable() { - public void run() { - try { - Jedis j = createJedis(); - Thread.sleep(1000); - j.publish("foo.123", "exit"); - Thread.sleep(1000); - j.publish("bar.123", "exit"); - j.disconnect(); - } catch (Exception ex) { - fail(ex.getMessage()); - } - } - }); - t.start(); - jedis.psubscribe(new JedisPubSub() { - public void onMessage(String channel, String message) { - } + InterruptedException { + jedis.psubscribe(new JedisPubSub() { + public void onMessage(String channel, String message) { + } - public void onSubscribe(String channel, int subscribedChannels) { - } + public void onSubscribe(String channel, int subscribedChannels) { + } - public void onUnsubscribe(String channel, int subscribedChannels) { - } + public void onUnsubscribe(String channel, int subscribedChannels) { + } - public void onPSubscribe(String pattern, int subscribedChannels) { - } + public void onPSubscribe(String pattern, int subscribedChannels) { + publishOne(pattern.replace("*", "123"), "exit"); + } - public void onPUnsubscribe(String pattern, int subscribedChannels) { - } + public void onPUnsubscribe(String pattern, int subscribedChannels) { + } - public void onPMessage(String pattern, String channel, - String message) { - punsubscribe(pattern); - } - }, "foo.*", "bar.*"); - t.join(); + public void onPMessage(String pattern, String channel, + String message) { + punsubscribe(pattern); + } + }, "foo.*", "bar.*"); } @Test public void subscribeLazily() throws UnknownHostException, IOException, - InterruptedException { - final JedisPubSub pubsub = new JedisPubSub() { - public void onMessage(String channel, String message) { - unsubscribe(channel); - } + InterruptedException { + final JedisPubSub pubsub = new JedisPubSub() { + public void onMessage(String channel, String message) { + unsubscribe(channel); + } - public void onSubscribe(String channel, int subscribedChannels) { - } + public void onSubscribe(String channel, int subscribedChannels) { + publishOne(channel, "exit"); + if (!channel.equals("bar")) { + this.subscribe("bar"); + this.psubscribe("bar.*"); + } + } - public void onUnsubscribe(String channel, int subscribedChannels) { - } + public void onUnsubscribe(String channel, int subscribedChannels) { + } - public void onPSubscribe(String pattern, int subscribedChannels) { - } + public void onPSubscribe(String pattern, int subscribedChannels) { + publishOne(pattern.replace("*", "123"), "exit"); + } - public void onPUnsubscribe(String pattern, int subscribedChannels) { - } + public void onPUnsubscribe(String pattern, int subscribedChannels) { + } - public void onPMessage(String pattern, String channel, - String message) { - punsubscribe(pattern); - } - }; + public void onPMessage(String pattern, String channel, + String message) { + punsubscribe(pattern); + } + }; - Thread t = new Thread(new Runnable() { - public void run() { - try { - Jedis j = createJedis(); - Thread.sleep(1000); - pubsub.subscribe("bar"); - pubsub.psubscribe("bar.*"); - j.publish("foo", "exit"); - j.publish("bar", "exit"); - j.publish("bar.123", "exit"); - j.disconnect(); - } catch (Exception ex) { - fail(ex.getMessage()); - } - } - }); - t.start(); - jedis.subscribe(pubsub, "foo"); - t.join(); + jedis.subscribe(pubsub, "foo"); } @Test public void binarySubscribe() throws UnknownHostException, IOException, - InterruptedException { - Thread t = new Thread(new Runnable() { - public void run() { - try { - Jedis j = createJedis(); - Thread.sleep(1000); - j.publish(SafeEncoder.encode("foo"), SafeEncoder - .encode("exit")); - j.disconnect(); - } catch (Exception ex) { - fail(ex.getMessage()); - } - } - }); - t.start(); - jedis.subscribe(new BinaryJedisPubSub() { - public void onMessage(byte[] channel, byte[] message) { - assertTrue(Arrays.equals(SafeEncoder.encode("foo"), channel)); - assertTrue(Arrays.equals(SafeEncoder.encode("exit"), message)); - unsubscribe(); - } + InterruptedException { + jedis.subscribe(new BinaryJedisPubSub() { + public void onMessage(byte[] channel, byte[] message) { + assertTrue(Arrays.equals(SafeEncoder.encode("foo"), channel)); + assertTrue(Arrays.equals(SafeEncoder.encode("exit"), message)); + unsubscribe(); + } - public void onSubscribe(byte[] channel, int subscribedChannels) { - assertTrue(Arrays.equals(SafeEncoder.encode("foo"), channel)); - assertEquals(1, subscribedChannels); - } + public void onSubscribe(byte[] channel, int subscribedChannels) { + assertTrue(Arrays.equals(SafeEncoder.encode("foo"), channel)); + assertEquals(1, subscribedChannels); + publishOne(SafeEncoder.encode(channel), "exit"); + } - public void onUnsubscribe(byte[] channel, int subscribedChannels) { - assertTrue(Arrays.equals(SafeEncoder.encode("foo"), channel)); - assertEquals(0, subscribedChannels); - } + public void onUnsubscribe(byte[] channel, int subscribedChannels) { + assertTrue(Arrays.equals(SafeEncoder.encode("foo"), channel)); + assertEquals(0, subscribedChannels); + } - public void onPSubscribe(byte[] pattern, int subscribedChannels) { - } + public void onPSubscribe(byte[] pattern, int subscribedChannels) { + } - public void onPUnsubscribe(byte[] pattern, int subscribedChannels) { - } + public void onPUnsubscribe(byte[] pattern, int subscribedChannels) { + } - public void onPMessage(byte[] pattern, byte[] channel, - byte[] message) { - } - }, SafeEncoder.encode("foo")); - t.join(); + public void onPMessage(byte[] pattern, byte[] channel, + byte[] message) { + } + }, SafeEncoder.encode("foo")); } @Test public void binarySubscribeMany() throws UnknownHostException, IOException, - InterruptedException { - Thread t = new Thread(new Runnable() { - public void run() { - try { - Jedis j = createJedis(); - Thread.sleep(1000); - j.publish(SafeEncoder.encode("foo"), SafeEncoder - .encode("exit")); - Thread.sleep(1000); - j.publish(SafeEncoder.encode("bar"), SafeEncoder - .encode("exit")); - j.disconnect(); - } catch (Exception ex) { - fail(ex.getMessage()); - } - } - }); - t.start(); - jedis.subscribe(new BinaryJedisPubSub() { - public void onMessage(byte[] channel, byte[] message) { - unsubscribe(channel); - } + InterruptedException { + jedis.subscribe(new BinaryJedisPubSub() { + public void onMessage(byte[] channel, byte[] message) { + unsubscribe(channel); + } - public void onSubscribe(byte[] channel, int subscribedChannels) { - } + public void onSubscribe(byte[] channel, int subscribedChannels) { + publishOne(SafeEncoder.encode(channel), "exit"); + } - public void onUnsubscribe(byte[] channel, int subscribedChannels) { - } + public void onUnsubscribe(byte[] channel, int subscribedChannels) { + } - public void onPSubscribe(byte[] pattern, int subscribedChannels) { - } + public void onPSubscribe(byte[] pattern, int subscribedChannels) { + } - public void onPUnsubscribe(byte[] pattern, int subscribedChannels) { - } + public void onPUnsubscribe(byte[] pattern, int subscribedChannels) { + } - public void onPMessage(byte[] pattern, byte[] channel, - byte[] message) { - } - }, SafeEncoder.encode("foo"), SafeEncoder.encode("bar")); - t.join(); + public void onPMessage(byte[] pattern, byte[] channel, + byte[] message) { + } + }, SafeEncoder.encode("foo"), SafeEncoder.encode("bar")); } @Test public void binaryPsubscribe() throws UnknownHostException, IOException, - InterruptedException { - Thread t = new Thread(new Runnable() { - public void run() { - try { - Jedis j = createJedis(); - Thread.sleep(1000); - j.publish(SafeEncoder.encode("foo.bar"), SafeEncoder - .encode("exit")); - j.disconnect(); - } catch (Exception ex) { - fail(ex.getMessage()); - } - } - }); - t.start(); - jedis.psubscribe(new BinaryJedisPubSub() { - public void onMessage(byte[] channel, byte[] message) { - } + InterruptedException { + jedis.psubscribe(new BinaryJedisPubSub() { + public void onMessage(byte[] channel, byte[] message) { + } - public void onSubscribe(byte[] channel, int subscribedChannels) { - } + public void onSubscribe(byte[] channel, int subscribedChannels) { + } - public void onUnsubscribe(byte[] channel, int subscribedChannels) { - } + public void onUnsubscribe(byte[] channel, int subscribedChannels) { + } - public void onPSubscribe(byte[] pattern, int subscribedChannels) { - assertTrue(Arrays.equals(SafeEncoder.encode("foo.*"), pattern)); - assertEquals(1, subscribedChannels); - } + public void onPSubscribe(byte[] pattern, int subscribedChannels) { + assertTrue(Arrays.equals(SafeEncoder.encode("foo.*"), pattern)); + assertEquals(1, subscribedChannels); + publishOne(SafeEncoder.encode(pattern).replace("*", "bar"), + "exit"); + } - public void onPUnsubscribe(byte[] pattern, int subscribedChannels) { - assertTrue(Arrays.equals(SafeEncoder.encode("foo.*"), pattern)); - assertEquals(0, subscribedChannels); - } + public void onPUnsubscribe(byte[] pattern, int subscribedChannels) { + assertTrue(Arrays.equals(SafeEncoder.encode("foo.*"), pattern)); + assertEquals(0, subscribedChannels); + } - public void onPMessage(byte[] pattern, byte[] channel, - byte[] message) { - assertTrue(Arrays.equals(SafeEncoder.encode("foo.*"), pattern)); - assertTrue(Arrays - .equals(SafeEncoder.encode("foo.bar"), channel)); - assertTrue(Arrays.equals(SafeEncoder.encode("exit"), message)); - punsubscribe(); - } - }, SafeEncoder.encode("foo.*")); - t.join(); + public void onPMessage(byte[] pattern, byte[] channel, + byte[] message) { + assertTrue(Arrays.equals(SafeEncoder.encode("foo.*"), pattern)); + assertTrue(Arrays + .equals(SafeEncoder.encode("foo.bar"), channel)); + assertTrue(Arrays.equals(SafeEncoder.encode("exit"), message)); + punsubscribe(); + } + }, SafeEncoder.encode("foo.*")); } @Test public void binaryPsubscribeMany() throws UnknownHostException, - IOException, InterruptedException { - Thread t = new Thread(new Runnable() { - public void run() { - try { - Jedis j = createJedis(); - Thread.sleep(1000); - j.publish(SafeEncoder.encode("foo.123"), SafeEncoder - .encode("exit")); - Thread.sleep(1000); - j.publish(SafeEncoder.encode("bar.123"), SafeEncoder - .encode("exit")); - j.disconnect(); - } catch (Exception ex) { - fail(ex.getMessage()); - } - } - }); - t.start(); - jedis.psubscribe(new BinaryJedisPubSub() { - public void onMessage(byte[] channel, byte[] message) { - } + IOException, InterruptedException { + jedis.psubscribe(new BinaryJedisPubSub() { + public void onMessage(byte[] channel, byte[] message) { + } - public void onSubscribe(byte[] channel, int subscribedChannels) { - } + public void onSubscribe(byte[] channel, int subscribedChannels) { + } - public void onUnsubscribe(byte[] channel, int subscribedChannels) { - } + public void onUnsubscribe(byte[] channel, int subscribedChannels) { + } - public void onPSubscribe(byte[] pattern, int subscribedChannels) { - } + public void onPSubscribe(byte[] pattern, int subscribedChannels) { + publishOne(SafeEncoder.encode(pattern).replace("*", "123"), + "exit"); + } - public void onPUnsubscribe(byte[] pattern, int subscribedChannels) { - } + public void onPUnsubscribe(byte[] pattern, int subscribedChannels) { + } - public void onPMessage(byte[] pattern, byte[] channel, - byte[] message) { - punsubscribe(pattern); - } - }, SafeEncoder.encode("foo.*"), SafeEncoder.encode("bar.*")); - t.join(); + public void onPMessage(byte[] pattern, byte[] channel, + byte[] message) { + punsubscribe(pattern); + } + }, SafeEncoder.encode("foo.*"), SafeEncoder.encode("bar.*")); } @Test public void binarySubscribeLazily() throws UnknownHostException, - IOException, InterruptedException { - final BinaryJedisPubSub pubsub = new BinaryJedisPubSub() { - public void onMessage(byte[] channel, byte[] message) { - unsubscribe(channel); - } + IOException, InterruptedException { + final BinaryJedisPubSub pubsub = new BinaryJedisPubSub() { + public void onMessage(byte[] channel, byte[] message) { + unsubscribe(channel); + } - public void onSubscribe(byte[] channel, int subscribedChannels) { - } + public void onSubscribe(byte[] channel, int subscribedChannels) { + publishOne(SafeEncoder.encode(channel), "exit"); - public void onUnsubscribe(byte[] channel, int subscribedChannels) { - } + if (!SafeEncoder.encode(channel).equals("bar")) { + this.subscribe(SafeEncoder.encode("bar")); + this.psubscribe(SafeEncoder.encode("bar.*")); + } + } - public void onPSubscribe(byte[] pattern, int subscribedChannels) { - } + public void onUnsubscribe(byte[] channel, int subscribedChannels) { + } - public void onPUnsubscribe(byte[] pattern, int subscribedChannels) { - } + public void onPSubscribe(byte[] pattern, int subscribedChannels) { + publishOne(SafeEncoder.encode(pattern).replace("*", "123"), + "exit"); + } - public void onPMessage(byte[] pattern, byte[] channel, - byte[] message) { - punsubscribe(pattern); - } - }; + public void onPUnsubscribe(byte[] pattern, int subscribedChannels) { + } - Thread t = new Thread(new Runnable() { - public void run() { - try { - Jedis j = createJedis(); - Thread.sleep(1000); - pubsub.subscribe(SafeEncoder.encode("bar")); - pubsub.psubscribe(SafeEncoder.encode("bar.*")); - j.publish(SafeEncoder.encode("foo"), SafeEncoder - .encode("exit")); - j.publish(SafeEncoder.encode("bar"), SafeEncoder - .encode("exit")); - j.publish(SafeEncoder.encode("bar.123"), SafeEncoder - .encode("exit")); - j.disconnect(); - } catch (Exception ex) { - fail(ex.getMessage()); - } - } - }); - t.start(); - jedis.subscribe(pubsub, SafeEncoder.encode("foo")); - t.join(); - } + public void onPMessage(byte[] pattern, byte[] channel, + byte[] message) { + punsubscribe(pattern); + } + }; - @Test @Ignore - public void subscribeWithoutConnecting() { - try { - Jedis jedis = new Jedis(hnp.host, hnp.port); - jedis.subscribe(new JedisPubSub() { - public void onMessage(String channel, String message) { - } - - public void onPMessage(String pattern, String channel, - String message) { - } - - public void onSubscribe(String channel, int subscribedChannels) { - } - - public void onUnsubscribe(String channel, int subscribedChannels) { - } - - public void onPUnsubscribe(String pattern, - int subscribedChannels) { - } - - public void onPSubscribe(String pattern, int subscribedChannels) { - } - }, "foo"); - } catch (NullPointerException ex) { - fail(); - } catch (JedisDataException ex) { - // this is OK because we are not sending AUTH command - } + jedis.subscribe(pubsub, SafeEncoder.encode("foo")); } @Test(expected = JedisConnectionException.class) public void unsubscribeWhenNotSusbscribed() throws InterruptedException { - JedisPubSub pubsub = new JedisPubSub() { - public void onMessage(String channel, String message) { - } + JedisPubSub pubsub = new JedisPubSub() { + public void onMessage(String channel, String message) { + } - public void onPMessage(String pattern, String channel, - String message) { - } + public void onPMessage(String pattern, String channel, + String message) { + } - public void onSubscribe(String channel, int subscribedChannels) { - } + public void onSubscribe(String channel, int subscribedChannels) { + } - public void onUnsubscribe(String channel, int subscribedChannels) { - } + public void onUnsubscribe(String channel, int subscribedChannels) { + } - public void onPUnsubscribe(String pattern, int subscribedChannels) { - } + public void onPUnsubscribe(String pattern, int subscribedChannels) { + } - public void onPSubscribe(String pattern, int subscribedChannels) { - } - }; - pubsub.unsubscribe(); + public void onPSubscribe(String pattern, int subscribedChannels) { + } + }; + pubsub.unsubscribe(); + } + + @Test(expected = JedisConnectionException.class) + public void handleClientOutputBufferLimitForSubscribeTooSlow() + throws InterruptedException { + final Jedis j = createJedis(); + final AtomicBoolean exit = new AtomicBoolean(false); + + final Thread t = new Thread(new Runnable() { + public void run() { + try { + + // we already set jedis1 config to + // client-output-buffer-limit pubsub 256k 128k 5 + // it means if subscriber delayed to receive over 256k or + // 128k continuously 5 sec, + // redis disconnects subscriber + + // we publish over 100M data for making situation for exceed + // client-output-buffer-limit + String veryLargeString = makeLargeString(10485760); + + // 10M * 10 = 100M + for (int i = 0; i < 10 && !exit.get(); i++) { + j.publish("foo", veryLargeString); + } + + j.disconnect(); + } catch (Exception ex) { + } + } + }); + t.start(); + try { + jedis.subscribe(new JedisPubSub() { + public void onMessage(String channel, String message) { + try { + // wait 0.5 secs to slow down subscribe and + // client-output-buffer exceed + // System.out.println("channel - " + channel + + // " / message - " + message); + Thread.sleep(100); + } catch (Exception e) { + try { + t.join(); + } catch (InterruptedException e1) { + } + + fail(e.getMessage()); + } + } + + public void onSubscribe(String channel, int subscribedChannels) { + } + + public void onUnsubscribe(String channel, int subscribedChannels) { + } + + public void onPSubscribe(String pattern, int subscribedChannels) { + } + + public void onPUnsubscribe(String pattern, + int subscribedChannels) { + } + + public void onPMessage(String pattern, String channel, + String message) { + } + }, "foo"); + } finally { + // exit the publisher thread. if exception is thrown, thread might + // still keep publishing things. + exit.set(true); + if (t.isAlive()) { + t.join(); + } + } + } + + private String makeLargeString(int size) { + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < size; i++) + sb.append((char) ('a' + i % 26)); + + return sb.toString(); } } diff --git a/src/test/java/redis/clients/jedis/tests/commands/ScriptingCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/ScriptingCommandsTest.java index b634b2c..8752311 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/ScriptingCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/ScriptingCommandsTest.java @@ -3,6 +3,8 @@ package redis.clients.jedis.tests.commands; import org.hamcrest.CoreMatchers; import org.hamcrest.core.CombinableMatcher; import org.junit.Test; + +import redis.clients.jedis.BinaryJedis; import redis.clients.jedis.exceptions.JedisDataException; import redis.clients.util.SafeEncoder; @@ -18,7 +20,7 @@ public class ScriptingCommandsTest extends JedisCommandTestBase { @SuppressWarnings("unchecked") @Test public void evalMultiBulk() { - String script = "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}"; + String script = "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2],ARGV[3]}"; List keys = new ArrayList(); keys.add("key1"); keys.add("key2"); @@ -26,14 +28,44 @@ public class ScriptingCommandsTest extends JedisCommandTestBase { List args = new ArrayList(); args.add("first"); args.add("second"); + args.add("third"); List response = (List) jedis.eval(script, keys, args); - assertEquals(4, response.size()); + assertEquals(5, response.size()); assertEquals("key1", response.get(0)); assertEquals("key2", response.get(1)); assertEquals("first", response.get(2)); assertEquals("second", response.get(3)); + assertEquals("third", response.get(4)); + } + + @SuppressWarnings("unchecked") + @Test + public void evalMultiBulkWithBinaryJedis() { + String script = "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2],ARGV[3]}"; + List keys = new ArrayList(); + keys.add("key1".getBytes()); + keys.add("key2".getBytes()); + + List args = new ArrayList(); + args.add("first".getBytes()); + args.add("second".getBytes()); + args.add("third".getBytes()); + + BinaryJedis binaryJedis = new BinaryJedis(hnp.getHost(), hnp.getPort(), + 500); + binaryJedis.connect(); + binaryJedis.auth("foobared"); + + List responses = (List) binaryJedis.eval( + script.getBytes(), keys, args); + assertEquals(5, responses.size()); + assertEquals("key1", new String(responses.get(0))); + assertEquals("key2", new String(responses.get(1))); + assertEquals("first", new String(responses.get(2))); + assertEquals("second", new String(responses.get(3))); + assertEquals("third", new String(responses.get(4))); } @Test @@ -176,4 +208,3 @@ public class ScriptingCommandsTest extends JedisCommandTestBase { return both(CoreMatchers.>instanceOf(List.class)).and(hasItem(equalTo(expected))); } } - diff --git a/src/test/java/redis/clients/jedis/tests/commands/SetCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/SetCommandsTest.java index eff71ec..80e59ad 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/SetCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/SetCommandsTest.java @@ -6,6 +6,9 @@ import java.util.Set; import org.junit.Test; +import redis.clients.jedis.ScanParams; +import redis.clients.jedis.ScanResult; + public class SetCommandsTest extends JedisCommandTestBase { final byte[] bfoo = { 0x01, 0x02, 0x03, 0x04 }; final byte[] bbar = { 0x05, 0x06, 0x07, 0x08 }; @@ -18,437 +21,469 @@ public class SetCommandsTest extends JedisCommandTestBase { @Test public void sadd() { - long status = jedis.sadd("foo", "a"); - assertEquals(1, status); + long status = jedis.sadd("foo", "a"); + assertEquals(1, status); - status = jedis.sadd("foo", "a"); - assertEquals(0, status); + status = jedis.sadd("foo", "a"); + assertEquals(0, status); - long bstatus = jedis.sadd(bfoo, ba); - assertEquals(1, bstatus); + long bstatus = jedis.sadd(bfoo, ba); + assertEquals(1, bstatus); - bstatus = jedis.sadd(bfoo, ba); - assertEquals(0, bstatus); + bstatus = jedis.sadd(bfoo, ba); + assertEquals(0, bstatus); } @Test public void smembers() { - jedis.sadd("foo", "a"); - jedis.sadd("foo", "b"); + jedis.sadd("foo", "a"); + jedis.sadd("foo", "b"); - Set expected = new HashSet(); - expected.add("a"); - expected.add("b"); + Set expected = new HashSet(); + expected.add("a"); + expected.add("b"); - Set members = jedis.smembers("foo"); + Set members = jedis.smembers("foo"); - assertEquals(expected, members); + assertEquals(expected, members); - // Binary - jedis.sadd(bfoo, ba); - jedis.sadd(bfoo, bb); + // Binary + jedis.sadd(bfoo, ba); + jedis.sadd(bfoo, bb); - Set bexpected = new HashSet(); - bexpected.add(bb); - bexpected.add(ba); + Set bexpected = new HashSet(); + bexpected.add(bb); + bexpected.add(ba); - Set bmembers = jedis.smembers(bfoo); + Set bmembers = jedis.smembers(bfoo); - assertEquals(bexpected, bmembers); + assertEquals(bexpected, bmembers); } - + @Test public void srem() { - jedis.sadd("foo", "a"); - jedis.sadd("foo", "b"); + jedis.sadd("foo", "a"); + jedis.sadd("foo", "b"); - long status = jedis.srem("foo", "a"); + long status = jedis.srem("foo", "a"); - Set expected = new HashSet(); - expected.add("b"); + Set expected = new HashSet(); + expected.add("b"); - assertEquals(1, status); - assertEquals(expected, jedis.smembers("foo")); + assertEquals(1, status); + assertEquals(expected, jedis.smembers("foo")); - status = jedis.srem("foo", "bar"); + status = jedis.srem("foo", "bar"); - assertEquals(0, status); + assertEquals(0, status); - // Binary + // Binary - jedis.sadd(bfoo, ba); - jedis.sadd(bfoo, bb); + jedis.sadd(bfoo, ba); + jedis.sadd(bfoo, bb); - long bstatus = jedis.srem(bfoo, ba); + long bstatus = jedis.srem(bfoo, ba); - Set bexpected = new HashSet(); - bexpected.add(bb); + Set bexpected = new HashSet(); + bexpected.add(bb); - assertEquals(1, bstatus); - assertEquals(bexpected, jedis.smembers(bfoo)); + assertEquals(1, bstatus); + assertEquals(bexpected, jedis.smembers(bfoo)); - bstatus = jedis.srem(bfoo, bbar); + bstatus = jedis.srem(bfoo, bbar); - assertEquals(0, bstatus); + assertEquals(0, bstatus); } @Test public void spop() { - jedis.sadd("foo", "a"); - jedis.sadd("foo", "b"); + jedis.sadd("foo", "a"); + jedis.sadd("foo", "b"); - String member = jedis.spop("foo"); + String member = jedis.spop("foo"); - assertTrue("a".equals(member) || "b".equals(member)); - assertEquals(1, jedis.smembers("foo").size()); + assertTrue("a".equals(member) || "b".equals(member)); + assertEquals(1, jedis.smembers("foo").size()); - member = jedis.spop("bar"); - assertNull(member); + member = jedis.spop("bar"); + assertNull(member); - // Binary - jedis.sadd(bfoo, ba); - jedis.sadd(bfoo, bb); + // Binary + jedis.sadd(bfoo, ba); + jedis.sadd(bfoo, bb); - byte[] bmember = jedis.spop(bfoo); + byte[] bmember = jedis.spop(bfoo); - assertTrue(Arrays.equals(ba, bmember) || Arrays.equals(bb, bmember)); - assertEquals(1, jedis.smembers(bfoo).size()); + assertTrue(Arrays.equals(ba, bmember) || Arrays.equals(bb, bmember)); + assertEquals(1, jedis.smembers(bfoo).size()); - bmember = jedis.spop(bbar); - assertNull(bmember); + bmember = jedis.spop(bbar); + assertNull(bmember); } @Test public void smove() { - jedis.sadd("foo", "a"); - jedis.sadd("foo", "b"); + jedis.sadd("foo", "a"); + jedis.sadd("foo", "b"); - jedis.sadd("bar", "c"); + jedis.sadd("bar", "c"); - long status = jedis.smove("foo", "bar", "a"); + long status = jedis.smove("foo", "bar", "a"); - Set expectedSrc = new HashSet(); - expectedSrc.add("b"); + Set expectedSrc = new HashSet(); + expectedSrc.add("b"); - Set expectedDst = new HashSet(); - expectedDst.add("c"); - expectedDst.add("a"); + Set expectedDst = new HashSet(); + expectedDst.add("c"); + expectedDst.add("a"); - assertEquals(status, 1); - assertEquals(expectedSrc, jedis.smembers("foo")); - assertEquals(expectedDst, jedis.smembers("bar")); + assertEquals(status, 1); + assertEquals(expectedSrc, jedis.smembers("foo")); + assertEquals(expectedDst, jedis.smembers("bar")); - status = jedis.smove("foo", "bar", "a"); + status = jedis.smove("foo", "bar", "a"); - assertEquals(status, 0); + assertEquals(status, 0); - // Binary - jedis.sadd(bfoo, ba); - jedis.sadd(bfoo, bb); + // Binary + jedis.sadd(bfoo, ba); + jedis.sadd(bfoo, bb); - jedis.sadd(bbar, bc); + jedis.sadd(bbar, bc); - long bstatus = jedis.smove(bfoo, bbar, ba); + long bstatus = jedis.smove(bfoo, bbar, ba); - Set bexpectedSrc = new HashSet(); - bexpectedSrc.add(bb); + Set bexpectedSrc = new HashSet(); + bexpectedSrc.add(bb); - Set bexpectedDst = new HashSet(); - bexpectedDst.add(bc); - bexpectedDst.add(ba); + Set bexpectedDst = new HashSet(); + bexpectedDst.add(bc); + bexpectedDst.add(ba); - assertEquals(bstatus, 1); - assertEquals(bexpectedSrc, jedis.smembers(bfoo)); - assertEquals(bexpectedDst, jedis.smembers(bbar)); + assertEquals(bstatus, 1); + assertEquals(bexpectedSrc, jedis.smembers(bfoo)); + assertEquals(bexpectedDst, jedis.smembers(bbar)); - bstatus = jedis.smove(bfoo, bbar, ba); - assertEquals(bstatus, 0); + bstatus = jedis.smove(bfoo, bbar, ba); + assertEquals(bstatus, 0); } @Test public void scard() { - jedis.sadd("foo", "a"); - jedis.sadd("foo", "b"); + jedis.sadd("foo", "a"); + jedis.sadd("foo", "b"); - long card = jedis.scard("foo"); + long card = jedis.scard("foo"); - assertEquals(2, card); + assertEquals(2, card); - card = jedis.scard("bar"); - assertEquals(0, card); + card = jedis.scard("bar"); + assertEquals(0, card); - // Binary - jedis.sadd(bfoo, ba); - jedis.sadd(bfoo, bb); + // Binary + jedis.sadd(bfoo, ba); + jedis.sadd(bfoo, bb); - long bcard = jedis.scard(bfoo); + long bcard = jedis.scard(bfoo); - assertEquals(2, bcard); + assertEquals(2, bcard); - bcard = jedis.scard(bbar); - assertEquals(0, bcard); + bcard = jedis.scard(bbar); + assertEquals(0, bcard); } @Test public void sismember() { - jedis.sadd("foo", "a"); - jedis.sadd("foo", "b"); + jedis.sadd("foo", "a"); + jedis.sadd("foo", "b"); - assertTrue(jedis.sismember("foo", "a")); + assertTrue(jedis.sismember("foo", "a")); - assertFalse(jedis.sismember("foo", "c")); + assertFalse(jedis.sismember("foo", "c")); - // Binary - jedis.sadd(bfoo, ba); - jedis.sadd(bfoo, bb); + // Binary + jedis.sadd(bfoo, ba); + jedis.sadd(bfoo, bb); - assertTrue(jedis.sismember(bfoo, ba)); + assertTrue(jedis.sismember(bfoo, ba)); - assertFalse(jedis.sismember(bfoo, bc)); + assertFalse(jedis.sismember(bfoo, bc)); } @Test public void sinter() { - jedis.sadd("foo", "a"); - jedis.sadd("foo", "b"); + jedis.sadd("foo", "a"); + jedis.sadd("foo", "b"); - jedis.sadd("bar", "b"); - jedis.sadd("bar", "c"); + jedis.sadd("bar", "b"); + jedis.sadd("bar", "c"); - Set expected = new HashSet(); - expected.add("b"); + Set expected = new HashSet(); + expected.add("b"); - Set intersection = jedis.sinter("foo", "bar"); - assertEquals(expected, intersection); + Set intersection = jedis.sinter("foo", "bar"); + assertEquals(expected, intersection); - // Binary - jedis.sadd(bfoo, ba); - jedis.sadd(bfoo, bb); + // Binary + jedis.sadd(bfoo, ba); + jedis.sadd(bfoo, bb); - jedis.sadd(bbar, bb); - jedis.sadd(bbar, bc); + jedis.sadd(bbar, bb); + jedis.sadd(bbar, bc); - Set bexpected = new HashSet(); - bexpected.add(bb); + Set bexpected = new HashSet(); + bexpected.add(bb); - Set bintersection = jedis.sinter(bfoo, bbar); - assertEquals(bexpected, bintersection); + Set bintersection = jedis.sinter(bfoo, bbar); + assertEquals(bexpected, bintersection); } @Test public void sinterstore() { - jedis.sadd("foo", "a"); - jedis.sadd("foo", "b"); + jedis.sadd("foo", "a"); + jedis.sadd("foo", "b"); - jedis.sadd("bar", "b"); - jedis.sadd("bar", "c"); + jedis.sadd("bar", "b"); + jedis.sadd("bar", "c"); - Set expected = new HashSet(); - expected.add("b"); + Set expected = new HashSet(); + expected.add("b"); - long status = jedis.sinterstore("car", "foo", "bar"); - assertEquals(1, status); + long status = jedis.sinterstore("car", "foo", "bar"); + assertEquals(1, status); - assertEquals(expected, jedis.smembers("car")); + assertEquals(expected, jedis.smembers("car")); - // Binary - jedis.sadd(bfoo, ba); - jedis.sadd(bfoo, bb); + // Binary + jedis.sadd(bfoo, ba); + jedis.sadd(bfoo, bb); - jedis.sadd(bbar, bb); - jedis.sadd(bbar, bc); + jedis.sadd(bbar, bb); + jedis.sadd(bbar, bc); - Set bexpected = new HashSet(); - bexpected.add(bb); + Set bexpected = new HashSet(); + bexpected.add(bb); - long bstatus = jedis.sinterstore(bcar, bfoo, bbar); - assertEquals(1, bstatus); + long bstatus = jedis.sinterstore(bcar, bfoo, bbar); + assertEquals(1, bstatus); - assertEquals(bexpected, jedis.smembers(bcar)); + assertEquals(bexpected, jedis.smembers(bcar)); } @Test public void sunion() { - jedis.sadd("foo", "a"); - jedis.sadd("foo", "b"); + jedis.sadd("foo", "a"); + jedis.sadd("foo", "b"); - jedis.sadd("bar", "b"); - jedis.sadd("bar", "c"); + jedis.sadd("bar", "b"); + jedis.sadd("bar", "c"); - Set expected = new HashSet(); - expected.add("a"); - expected.add("b"); - expected.add("c"); + Set expected = new HashSet(); + expected.add("a"); + expected.add("b"); + expected.add("c"); - Set union = jedis.sunion("foo", "bar"); - assertEquals(expected, union); + Set union = jedis.sunion("foo", "bar"); + assertEquals(expected, union); - // Binary - jedis.sadd(bfoo, ba); - jedis.sadd(bfoo, bb); + // Binary + jedis.sadd(bfoo, ba); + jedis.sadd(bfoo, bb); - jedis.sadd(bbar, bb); - jedis.sadd(bbar, bc); + jedis.sadd(bbar, bb); + jedis.sadd(bbar, bc); - Set bexpected = new HashSet(); - bexpected.add(bb); - bexpected.add(bc); - bexpected.add(ba); + Set bexpected = new HashSet(); + bexpected.add(bb); + bexpected.add(bc); + bexpected.add(ba); - Set bunion = jedis.sunion(bfoo, bbar); - assertEquals(bexpected, bunion); + Set bunion = jedis.sunion(bfoo, bbar); + assertEquals(bexpected, bunion); } @Test public void sunionstore() { - jedis.sadd("foo", "a"); - jedis.sadd("foo", "b"); + jedis.sadd("foo", "a"); + jedis.sadd("foo", "b"); - jedis.sadd("bar", "b"); - jedis.sadd("bar", "c"); + jedis.sadd("bar", "b"); + jedis.sadd("bar", "c"); - Set expected = new HashSet(); - expected.add("a"); - expected.add("b"); - expected.add("c"); + Set expected = new HashSet(); + expected.add("a"); + expected.add("b"); + expected.add("c"); - long status = jedis.sunionstore("car", "foo", "bar"); - assertEquals(3, status); + long status = jedis.sunionstore("car", "foo", "bar"); + assertEquals(3, status); - assertEquals(expected, jedis.smembers("car")); + assertEquals(expected, jedis.smembers("car")); - // Binary - jedis.sadd(bfoo, ba); - jedis.sadd(bfoo, bb); + // Binary + jedis.sadd(bfoo, ba); + jedis.sadd(bfoo, bb); - jedis.sadd(bbar, bb); - jedis.sadd(bbar, bc); + jedis.sadd(bbar, bb); + jedis.sadd(bbar, bc); - Set bexpected = new HashSet(); - bexpected.add(bb); - bexpected.add(bc); - bexpected.add(ba); + Set bexpected = new HashSet(); + bexpected.add(bb); + bexpected.add(bc); + bexpected.add(ba); - long bstatus = jedis.sunionstore(bcar, bfoo, bbar); - assertEquals(3, bstatus); + long bstatus = jedis.sunionstore(bcar, bfoo, bbar); + assertEquals(3, bstatus); - assertEquals(bexpected, jedis.smembers(bcar)); + assertEquals(bexpected, jedis.smembers(bcar)); } @Test public void sdiff() { - jedis.sadd("foo", "x"); - jedis.sadd("foo", "a"); - jedis.sadd("foo", "b"); - jedis.sadd("foo", "c"); + jedis.sadd("foo", "x"); + jedis.sadd("foo", "a"); + jedis.sadd("foo", "b"); + jedis.sadd("foo", "c"); - jedis.sadd("bar", "c"); + jedis.sadd("bar", "c"); - jedis.sadd("car", "a"); - jedis.sadd("car", "d"); + jedis.sadd("car", "a"); + jedis.sadd("car", "d"); - Set expected = new HashSet(); - expected.add("x"); - expected.add("b"); + Set expected = new HashSet(); + expected.add("x"); + expected.add("b"); - Set diff = jedis.sdiff("foo", "bar", "car"); - assertEquals(expected, diff); + Set diff = jedis.sdiff("foo", "bar", "car"); + assertEquals(expected, diff); - // Binary - jedis.sadd(bfoo, bx); - jedis.sadd(bfoo, ba); - jedis.sadd(bfoo, bb); - jedis.sadd(bfoo, bc); + // Binary + jedis.sadd(bfoo, bx); + jedis.sadd(bfoo, ba); + jedis.sadd(bfoo, bb); + jedis.sadd(bfoo, bc); - jedis.sadd(bbar, bc); + jedis.sadd(bbar, bc); - jedis.sadd(bcar, ba); - jedis.sadd(bcar, bd); + jedis.sadd(bcar, ba); + jedis.sadd(bcar, bd); - Set bexpected = new HashSet(); - bexpected.add(bb); - bexpected.add(bx); + Set bexpected = new HashSet(); + bexpected.add(bb); + bexpected.add(bx); - Set bdiff = jedis.sdiff(bfoo, bbar, bcar); - assertEquals(bexpected, bdiff); + Set bdiff = jedis.sdiff(bfoo, bbar, bcar); + assertEquals(bexpected, bdiff); } @Test public void sdiffstore() { - jedis.sadd("foo", "x"); - jedis.sadd("foo", "a"); - jedis.sadd("foo", "b"); - jedis.sadd("foo", "c"); + jedis.sadd("foo", "x"); + jedis.sadd("foo", "a"); + jedis.sadd("foo", "b"); + jedis.sadd("foo", "c"); - jedis.sadd("bar", "c"); + jedis.sadd("bar", "c"); - jedis.sadd("car", "a"); - jedis.sadd("car", "d"); + jedis.sadd("car", "a"); + jedis.sadd("car", "d"); - Set expected = new HashSet(); - expected.add("d"); - expected.add("a"); + Set expected = new HashSet(); + expected.add("d"); + expected.add("a"); - long status = jedis.sdiffstore("tar", "foo", "bar", "car"); - assertEquals(2, status); - assertEquals(expected, jedis.smembers("car")); + long status = jedis.sdiffstore("tar", "foo", "bar", "car"); + assertEquals(2, status); + assertEquals(expected, jedis.smembers("car")); - // Binary - jedis.sadd(bfoo, bx); - jedis.sadd(bfoo, ba); - jedis.sadd(bfoo, bb); - jedis.sadd(bfoo, bc); + // Binary + jedis.sadd(bfoo, bx); + jedis.sadd(bfoo, ba); + jedis.sadd(bfoo, bb); + jedis.sadd(bfoo, bc); - jedis.sadd(bbar, bc); + jedis.sadd(bbar, bc); - jedis.sadd(bcar, ba); - jedis.sadd(bcar, bd); + jedis.sadd(bcar, ba); + jedis.sadd(bcar, bd); - Set bexpected = new HashSet(); - bexpected.add(bd); - bexpected.add(ba); + Set bexpected = new HashSet(); + bexpected.add(bd); + bexpected.add(ba); - long bstatus = jedis.sdiffstore("tar".getBytes(), bfoo, bbar, bcar); - assertEquals(2, bstatus); - assertEquals(bexpected, jedis.smembers(bcar)); + long bstatus = jedis.sdiffstore("tar".getBytes(), bfoo, bbar, bcar); + assertEquals(2, bstatus); + assertEquals(bexpected, jedis.smembers(bcar)); } @Test public void srandmember() { - jedis.sadd("foo", "a"); - jedis.sadd("foo", "b"); + jedis.sadd("foo", "a"); + jedis.sadd("foo", "b"); - String member = jedis.srandmember("foo"); + String member = jedis.srandmember("foo"); - assertTrue("a".equals(member) || "b".equals(member)); - assertEquals(2, jedis.smembers("foo").size()); + assertTrue("a".equals(member) || "b".equals(member)); + assertEquals(2, jedis.smembers("foo").size()); - member = jedis.srandmember("bar"); - assertNull(member); + member = jedis.srandmember("bar"); + assertNull(member); - // Binary - jedis.sadd(bfoo, ba); - jedis.sadd(bfoo, bb); + // Binary + jedis.sadd(bfoo, ba); + jedis.sadd(bfoo, bb); - byte[] bmember = jedis.srandmember(bfoo); + byte[] bmember = jedis.srandmember(bfoo); - assertTrue(Arrays.equals(ba, bmember) || Arrays.equals(bb, bmember)); - assertEquals(2, jedis.smembers(bfoo).size()); - - bmember = jedis.srandmember(bbar); - assertNull(bmember); + assertTrue(Arrays.equals(ba, bmember) || Arrays.equals(bb, bmember)); + assertEquals(2, jedis.smembers(bfoo).size()); + bmember = jedis.srandmember(bbar); + assertNull(bmember); } + @Test + public void sscan() { + jedis.sadd("foo", "a", "b"); + + ScanResult result = jedis.sscan("foo", 0); + + assertEquals(0, result.getCursor()); + assertFalse(result.getResult().isEmpty()); + } + + @Test + public void sscanMatch() { + ScanParams params = new ScanParams(); + params.match("a*"); + + jedis.sadd("foo", "b", "a", "aa"); + ScanResult result = jedis.sscan("foo", 0, params); + + assertEquals(0, result.getCursor()); + assertFalse(result.getResult().isEmpty()); + } + + @Test + public void sscanCount() { + ScanParams params = new ScanParams(); + params.count(2); + + jedis.sadd("foo", "a1", "a2", "a3", "a4", "a5"); + + ScanResult result = jedis.sscan("foo", 0, params); + + assertFalse(result.getResult().isEmpty()); + } } \ No newline at end of file diff --git a/src/test/java/redis/clients/jedis/tests/commands/SlowlogCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/SlowlogCommandsTest.java index b65bfb7..55ba9c9 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/SlowlogCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/SlowlogCommandsTest.java @@ -7,42 +7,42 @@ import org.junit.Test; import redis.clients.util.Slowlog; public class SlowlogCommandsTest extends JedisCommandTestBase { - + @Test public void slowlog() { - //do something + // do something jedis.configSet("slowlog-log-slower-than", "0"); - jedis.set("foo", "bar"); - jedis.set("foo2", "bar2"); - - List reducedLog = jedis.slowlogGet(1); - assertEquals(1, reducedLog.size()); - - Slowlog log = reducedLog.get(0); - assertTrue(log.getId() > 0); - assertTrue(log.getTimeStamp() > 0); - assertTrue(log.getExecutionTime() > 0); - assertNotNull(log.getArgs()); - - List breducedLog = jedis.slowlogGetBinary(1); - assertEquals(1, breducedLog.size()); - - List log1 = jedis.slowlogGet(); - List blog1 = jedis.slowlogGetBinary(); - - assertNotNull(log1); - assertNotNull(blog1); - - long len1 = jedis.slowlogLen(); - - jedis.slowlogReset(); - - List log2 = jedis.slowlogGet(); - List blog2 = jedis.slowlogGetBinary(); - long len2 = jedis.slowlogLen(); - - assertTrue(len1 > len2); - assertTrue(log1.size() > log2.size()); - assertTrue(blog1.size() > blog2.size()); + jedis.set("foo", "bar"); + jedis.set("foo2", "bar2"); + + List reducedLog = jedis.slowlogGet(1); + assertEquals(1, reducedLog.size()); + + Slowlog log = reducedLog.get(0); + assertTrue(log.getId() > 0); + assertTrue(log.getTimeStamp() > 0); + assertTrue(log.getExecutionTime() > 0); + assertNotNull(log.getArgs()); + + List breducedLog = jedis.slowlogGetBinary(1); + assertEquals(1, breducedLog.size()); + + List log1 = jedis.slowlogGet(); + List blog1 = jedis.slowlogGetBinary(); + + assertNotNull(log1); + assertNotNull(blog1); + + long len1 = jedis.slowlogLen(); + + jedis.slowlogReset(); + + List log2 = jedis.slowlogGet(); + List blog2 = jedis.slowlogGetBinary(); + long len2 = jedis.slowlogLen(); + + assertTrue(len1 > len2); + assertTrue(log1.size() > log2.size()); + assertTrue(blog1.size() > blog2.size()); } } \ No newline at end of file diff --git a/src/test/java/redis/clients/jedis/tests/commands/SortedSetCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/SortedSetCommandsTest.java index 65b8155..b4fd3b6 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/SortedSetCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/SortedSetCommandsTest.java @@ -5,6 +5,8 @@ import java.util.Set; import org.junit.Test; +import redis.clients.jedis.ScanParams; +import redis.clients.jedis.ScanResult; import redis.clients.jedis.Tuple; import redis.clients.jedis.ZParams; import redis.clients.util.SafeEncoder; @@ -19,870 +21,912 @@ public class SortedSetCommandsTest extends JedisCommandTestBase { @Test public void zadd() { - long status = jedis.zadd("foo", 1d, "a"); - assertEquals(1, status); + long status = jedis.zadd("foo", 1d, "a"); + assertEquals(1, status); - status = jedis.zadd("foo", 10d, "b"); - assertEquals(1, status); + status = jedis.zadd("foo", 10d, "b"); + assertEquals(1, status); - status = jedis.zadd("foo", 0.1d, "c"); - assertEquals(1, status); + status = jedis.zadd("foo", 0.1d, "c"); + assertEquals(1, status); - status = jedis.zadd("foo", 2d, "a"); - assertEquals(0, status); + status = jedis.zadd("foo", 2d, "a"); + assertEquals(0, status); - // Binary - long bstatus = jedis.zadd(bfoo, 1d, ba); - assertEquals(1, bstatus); + // Binary + long bstatus = jedis.zadd(bfoo, 1d, ba); + assertEquals(1, bstatus); - bstatus = jedis.zadd(bfoo, 10d, bb); - assertEquals(1, bstatus); + bstatus = jedis.zadd(bfoo, 10d, bb); + assertEquals(1, bstatus); - bstatus = jedis.zadd(bfoo, 0.1d, bc); - assertEquals(1, bstatus); + bstatus = jedis.zadd(bfoo, 0.1d, bc); + assertEquals(1, bstatus); - bstatus = jedis.zadd(bfoo, 2d, ba); - assertEquals(0, bstatus); + bstatus = jedis.zadd(bfoo, 2d, ba); + assertEquals(0, bstatus); } @Test public void zrange() { - jedis.zadd("foo", 1d, "a"); - jedis.zadd("foo", 10d, "b"); - jedis.zadd("foo", 0.1d, "c"); - jedis.zadd("foo", 2d, "a"); + jedis.zadd("foo", 1d, "a"); + jedis.zadd("foo", 10d, "b"); + jedis.zadd("foo", 0.1d, "c"); + jedis.zadd("foo", 2d, "a"); - Set expected = new LinkedHashSet(); - expected.add("c"); - expected.add("a"); + Set expected = new LinkedHashSet(); + expected.add("c"); + expected.add("a"); - Set range = jedis.zrange("foo", 0, 1); - assertEquals(expected, range); + Set range = jedis.zrange("foo", 0, 1); + assertEquals(expected, range); - expected.add("b"); - range = jedis.zrange("foo", 0, 100); - assertEquals(expected, range); + expected.add("b"); + range = jedis.zrange("foo", 0, 100); + assertEquals(expected, range); - // Binary - jedis.zadd(bfoo, 1d, ba); - jedis.zadd(bfoo, 10d, bb); - jedis.zadd(bfoo, 0.1d, bc); - jedis.zadd(bfoo, 2d, ba); + // Binary + jedis.zadd(bfoo, 1d, ba); + jedis.zadd(bfoo, 10d, bb); + jedis.zadd(bfoo, 0.1d, bc); + jedis.zadd(bfoo, 2d, ba); - Set bexpected = new LinkedHashSet(); - bexpected.add(bc); - bexpected.add(ba); + Set bexpected = new LinkedHashSet(); + bexpected.add(bc); + bexpected.add(ba); - Set brange = jedis.zrange(bfoo, 0, 1); - assertEquals(bexpected, brange); + Set brange = jedis.zrange(bfoo, 0, 1); + assertEquals(bexpected, brange); - bexpected.add(bb); - brange = jedis.zrange(bfoo, 0, 100); - assertEquals(bexpected, brange); + bexpected.add(bb); + brange = jedis.zrange(bfoo, 0, 100); + assertEquals(bexpected, brange); } @Test public void zrevrange() { - jedis.zadd("foo", 1d, "a"); - jedis.zadd("foo", 10d, "b"); - jedis.zadd("foo", 0.1d, "c"); - jedis.zadd("foo", 2d, "a"); + jedis.zadd("foo", 1d, "a"); + jedis.zadd("foo", 10d, "b"); + jedis.zadd("foo", 0.1d, "c"); + jedis.zadd("foo", 2d, "a"); - Set expected = new LinkedHashSet(); - expected.add("b"); - expected.add("a"); + Set expected = new LinkedHashSet(); + expected.add("b"); + expected.add("a"); - Set range = jedis.zrevrange("foo", 0, 1); - assertEquals(expected, range); + Set range = jedis.zrevrange("foo", 0, 1); + assertEquals(expected, range); - expected.add("c"); - range = jedis.zrevrange("foo", 0, 100); - assertEquals(expected, range); + expected.add("c"); + range = jedis.zrevrange("foo", 0, 100); + assertEquals(expected, range); - // Binary - jedis.zadd(bfoo, 1d, ba); - jedis.zadd(bfoo, 10d, bb); - jedis.zadd(bfoo, 0.1d, bc); - jedis.zadd(bfoo, 2d, ba); + // Binary + jedis.zadd(bfoo, 1d, ba); + jedis.zadd(bfoo, 10d, bb); + jedis.zadd(bfoo, 0.1d, bc); + jedis.zadd(bfoo, 2d, ba); - Set bexpected = new LinkedHashSet(); - bexpected.add(bb); - bexpected.add(ba); + Set bexpected = new LinkedHashSet(); + bexpected.add(bb); + bexpected.add(ba); - Set brange = jedis.zrevrange(bfoo, 0, 1); - assertEquals(bexpected, brange); + Set brange = jedis.zrevrange(bfoo, 0, 1); + assertEquals(bexpected, brange); - bexpected.add(bc); - brange = jedis.zrevrange(bfoo, 0, 100); - assertEquals(bexpected, brange); + bexpected.add(bc); + brange = jedis.zrevrange(bfoo, 0, 100); + assertEquals(bexpected, brange); } @Test public void zrem() { - jedis.zadd("foo", 1d, "a"); - jedis.zadd("foo", 2d, "b"); + jedis.zadd("foo", 1d, "a"); + jedis.zadd("foo", 2d, "b"); - long status = jedis.zrem("foo", "a"); + long status = jedis.zrem("foo", "a"); - Set expected = new LinkedHashSet(); - expected.add("b"); + Set expected = new LinkedHashSet(); + expected.add("b"); - assertEquals(1, status); - assertEquals(expected, jedis.zrange("foo", 0, 100)); + assertEquals(1, status); + assertEquals(expected, jedis.zrange("foo", 0, 100)); - status = jedis.zrem("foo", "bar"); + status = jedis.zrem("foo", "bar"); - assertEquals(0, status); + assertEquals(0, status); - // Binary - jedis.zadd(bfoo, 1d, ba); - jedis.zadd(bfoo, 2d, bb); + // Binary + jedis.zadd(bfoo, 1d, ba); + jedis.zadd(bfoo, 2d, bb); - long bstatus = jedis.zrem(bfoo, ba); + long bstatus = jedis.zrem(bfoo, ba); - Set bexpected = new LinkedHashSet(); - bexpected.add(bb); + Set bexpected = new LinkedHashSet(); + bexpected.add(bb); - assertEquals(1, bstatus); - assertEquals(bexpected, jedis.zrange(bfoo, 0, 100)); + assertEquals(1, bstatus); + assertEquals(bexpected, jedis.zrange(bfoo, 0, 100)); - bstatus = jedis.zrem(bfoo, bbar); + bstatus = jedis.zrem(bfoo, bbar); - assertEquals(0, bstatus); + assertEquals(0, bstatus); } @Test public void zincrby() { - jedis.zadd("foo", 1d, "a"); - jedis.zadd("foo", 2d, "b"); + jedis.zadd("foo", 1d, "a"); + jedis.zadd("foo", 2d, "b"); - double score = jedis.zincrby("foo", 2d, "a"); + double score = jedis.zincrby("foo", 2d, "a"); - Set expected = new LinkedHashSet(); - expected.add("a"); - expected.add("b"); + Set expected = new LinkedHashSet(); + expected.add("a"); + expected.add("b"); - assertEquals(3d, score, 0); - assertEquals(expected, jedis.zrange("foo", 0, 100)); + assertEquals(3d, score, 0); + assertEquals(expected, jedis.zrange("foo", 0, 100)); - // Binary - jedis.zadd(bfoo, 1d, ba); - jedis.zadd(bfoo, 2d, bb); + // Binary + jedis.zadd(bfoo, 1d, ba); + jedis.zadd(bfoo, 2d, bb); - double bscore = jedis.zincrby(bfoo, 2d, ba); + double bscore = jedis.zincrby(bfoo, 2d, ba); - Set bexpected = new LinkedHashSet(); - bexpected.add(bb); - bexpected.add(ba); + Set bexpected = new LinkedHashSet(); + bexpected.add(bb); + bexpected.add(ba); - assertEquals(3d, bscore, 0); - assertEquals(bexpected, jedis.zrange(bfoo, 0, 100)); + assertEquals(3d, bscore, 0); + assertEquals(bexpected, jedis.zrange(bfoo, 0, 100)); } @Test public void zrank() { - jedis.zadd("foo", 1d, "a"); - jedis.zadd("foo", 2d, "b"); + jedis.zadd("foo", 1d, "a"); + jedis.zadd("foo", 2d, "b"); - long rank = jedis.zrank("foo", "a"); - assertEquals(0, rank); + long rank = jedis.zrank("foo", "a"); + assertEquals(0, rank); - rank = jedis.zrank("foo", "b"); - assertEquals(1, rank); + rank = jedis.zrank("foo", "b"); + assertEquals(1, rank); - assertNull(jedis.zrank("car", "b")); + assertNull(jedis.zrank("car", "b")); - // Binary - jedis.zadd(bfoo, 1d, ba); - jedis.zadd(bfoo, 2d, bb); + // Binary + jedis.zadd(bfoo, 1d, ba); + jedis.zadd(bfoo, 2d, bb); - long brank = jedis.zrank(bfoo, ba); - assertEquals(0, brank); + long brank = jedis.zrank(bfoo, ba); + assertEquals(0, brank); - brank = jedis.zrank(bfoo, bb); - assertEquals(1, brank); + brank = jedis.zrank(bfoo, bb); + assertEquals(1, brank); - assertNull(jedis.zrank(bcar, bb)); + assertNull(jedis.zrank(bcar, bb)); } @Test public void zrevrank() { - jedis.zadd("foo", 1d, "a"); - jedis.zadd("foo", 2d, "b"); + jedis.zadd("foo", 1d, "a"); + jedis.zadd("foo", 2d, "b"); - long rank = jedis.zrevrank("foo", "a"); - assertEquals(1, rank); + long rank = jedis.zrevrank("foo", "a"); + assertEquals(1, rank); - rank = jedis.zrevrank("foo", "b"); - assertEquals(0, rank); + rank = jedis.zrevrank("foo", "b"); + assertEquals(0, rank); - // Binary - jedis.zadd(bfoo, 1d, ba); - jedis.zadd(bfoo, 2d, bb); + // Binary + jedis.zadd(bfoo, 1d, ba); + jedis.zadd(bfoo, 2d, bb); - long brank = jedis.zrevrank(bfoo, ba); - assertEquals(1, brank); + long brank = jedis.zrevrank(bfoo, ba); + assertEquals(1, brank); - brank = jedis.zrevrank(bfoo, bb); - assertEquals(0, brank); + brank = jedis.zrevrank(bfoo, bb); + assertEquals(0, brank); } @Test public void zrangeWithScores() { - jedis.zadd("foo", 1d, "a"); - jedis.zadd("foo", 10d, "b"); - jedis.zadd("foo", 0.1d, "c"); - jedis.zadd("foo", 2d, "a"); + jedis.zadd("foo", 1d, "a"); + jedis.zadd("foo", 10d, "b"); + jedis.zadd("foo", 0.1d, "c"); + jedis.zadd("foo", 2d, "a"); - Set expected = new LinkedHashSet(); - expected.add(new Tuple("c", 0.1d)); - expected.add(new Tuple("a", 2d)); + Set expected = new LinkedHashSet(); + expected.add(new Tuple("c", 0.1d)); + expected.add(new Tuple("a", 2d)); - Set range = jedis.zrangeWithScores("foo", 0, 1); - assertEquals(expected, range); + Set range = jedis.zrangeWithScores("foo", 0, 1); + assertEquals(expected, range); - expected.add(new Tuple("b", 10d)); - range = jedis.zrangeWithScores("foo", 0, 100); - assertEquals(expected, range); + expected.add(new Tuple("b", 10d)); + range = jedis.zrangeWithScores("foo", 0, 100); + assertEquals(expected, range); - // Binary - jedis.zadd(bfoo, 1d, ba); - jedis.zadd(bfoo, 10d, bb); - jedis.zadd(bfoo, 0.1d, bc); - jedis.zadd(bfoo, 2d, ba); + // Binary + jedis.zadd(bfoo, 1d, ba); + jedis.zadd(bfoo, 10d, bb); + jedis.zadd(bfoo, 0.1d, bc); + jedis.zadd(bfoo, 2d, ba); - Set bexpected = new LinkedHashSet(); - bexpected.add(new Tuple(bc, 0.1d)); - bexpected.add(new Tuple(ba, 2d)); + Set bexpected = new LinkedHashSet(); + bexpected.add(new Tuple(bc, 0.1d)); + bexpected.add(new Tuple(ba, 2d)); - Set brange = jedis.zrangeWithScores(bfoo, 0, 1); - assertEquals(bexpected, brange); + Set brange = jedis.zrangeWithScores(bfoo, 0, 1); + assertEquals(bexpected, brange); - bexpected.add(new Tuple(bb, 10d)); - brange = jedis.zrangeWithScores(bfoo, 0, 100); - assertEquals(bexpected, brange); + bexpected.add(new Tuple(bb, 10d)); + brange = jedis.zrangeWithScores(bfoo, 0, 100); + assertEquals(bexpected, brange); } @Test public void zrevrangeWithScores() { - jedis.zadd("foo", 1d, "a"); - jedis.zadd("foo", 10d, "b"); - jedis.zadd("foo", 0.1d, "c"); - jedis.zadd("foo", 2d, "a"); + jedis.zadd("foo", 1d, "a"); + jedis.zadd("foo", 10d, "b"); + jedis.zadd("foo", 0.1d, "c"); + jedis.zadd("foo", 2d, "a"); - Set expected = new LinkedHashSet(); - expected.add(new Tuple("b", 10d)); - expected.add(new Tuple("a", 2d)); + Set expected = new LinkedHashSet(); + expected.add(new Tuple("b", 10d)); + expected.add(new Tuple("a", 2d)); - Set range = jedis.zrevrangeWithScores("foo", 0, 1); - assertEquals(expected, range); + Set range = jedis.zrevrangeWithScores("foo", 0, 1); + assertEquals(expected, range); - expected.add(new Tuple("c", 0.1d)); - range = jedis.zrevrangeWithScores("foo", 0, 100); - assertEquals(expected, range); + expected.add(new Tuple("c", 0.1d)); + range = jedis.zrevrangeWithScores("foo", 0, 100); + assertEquals(expected, range); - // Binary - jedis.zadd(bfoo, 1d, ba); - jedis.zadd(bfoo, 10d, bb); - jedis.zadd(bfoo, 0.1d, bc); - jedis.zadd(bfoo, 2d, ba); + // Binary + jedis.zadd(bfoo, 1d, ba); + jedis.zadd(bfoo, 10d, bb); + jedis.zadd(bfoo, 0.1d, bc); + jedis.zadd(bfoo, 2d, ba); - Set bexpected = new LinkedHashSet(); - bexpected.add(new Tuple(bb, 10d)); - bexpected.add(new Tuple(ba, 2d)); + Set bexpected = new LinkedHashSet(); + bexpected.add(new Tuple(bb, 10d)); + bexpected.add(new Tuple(ba, 2d)); - Set brange = jedis.zrevrangeWithScores(bfoo, 0, 1); - assertEquals(bexpected, brange); + Set brange = jedis.zrevrangeWithScores(bfoo, 0, 1); + assertEquals(bexpected, brange); - bexpected.add(new Tuple(bc, 0.1d)); - brange = jedis.zrevrangeWithScores(bfoo, 0, 100); - assertEquals(bexpected, brange); + bexpected.add(new Tuple(bc, 0.1d)); + brange = jedis.zrevrangeWithScores(bfoo, 0, 100); + assertEquals(bexpected, brange); } @Test public void zcard() { - jedis.zadd("foo", 1d, "a"); - jedis.zadd("foo", 10d, "b"); - jedis.zadd("foo", 0.1d, "c"); - jedis.zadd("foo", 2d, "a"); + jedis.zadd("foo", 1d, "a"); + jedis.zadd("foo", 10d, "b"); + jedis.zadd("foo", 0.1d, "c"); + jedis.zadd("foo", 2d, "a"); - long size = jedis.zcard("foo"); - assertEquals(3, size); + long size = jedis.zcard("foo"); + assertEquals(3, size); - // Binary - jedis.zadd(bfoo, 1d, ba); - jedis.zadd(bfoo, 10d, bb); - jedis.zadd(bfoo, 0.1d, bc); - jedis.zadd(bfoo, 2d, ba); + // Binary + jedis.zadd(bfoo, 1d, ba); + jedis.zadd(bfoo, 10d, bb); + jedis.zadd(bfoo, 0.1d, bc); + jedis.zadd(bfoo, 2d, ba); - long bsize = jedis.zcard(bfoo); - assertEquals(3, bsize); + long bsize = jedis.zcard(bfoo); + assertEquals(3, bsize); } @Test public void zscore() { - jedis.zadd("foo", 1d, "a"); - jedis.zadd("foo", 10d, "b"); - jedis.zadd("foo", 0.1d, "c"); - jedis.zadd("foo", 2d, "a"); + jedis.zadd("foo", 1d, "a"); + jedis.zadd("foo", 10d, "b"); + jedis.zadd("foo", 0.1d, "c"); + jedis.zadd("foo", 2d, "a"); - Double score = jedis.zscore("foo", "b"); - assertEquals((Double) 10d, score); + Double score = jedis.zscore("foo", "b"); + assertEquals((Double) 10d, score); - score = jedis.zscore("foo", "c"); - assertEquals((Double) 0.1d, score); + score = jedis.zscore("foo", "c"); + assertEquals((Double) 0.1d, score); - score = jedis.zscore("foo", "s"); - assertNull(score); + score = jedis.zscore("foo", "s"); + assertNull(score); - // Binary - jedis.zadd(bfoo, 1d, ba); - jedis.zadd(bfoo, 10d, bb); - jedis.zadd(bfoo, 0.1d, bc); - jedis.zadd(bfoo, 2d, ba); + // Binary + jedis.zadd(bfoo, 1d, ba); + jedis.zadd(bfoo, 10d, bb); + jedis.zadd(bfoo, 0.1d, bc); + jedis.zadd(bfoo, 2d, ba); - Double bscore = jedis.zscore(bfoo, bb); - assertEquals((Double) 10d, bscore); + Double bscore = jedis.zscore(bfoo, bb); + assertEquals((Double) 10d, bscore); - bscore = jedis.zscore(bfoo, bc); - assertEquals((Double) 0.1d, bscore); + bscore = jedis.zscore(bfoo, bc); + assertEquals((Double) 0.1d, bscore); - bscore = jedis.zscore(bfoo, SafeEncoder.encode("s")); - assertNull(bscore); + bscore = jedis.zscore(bfoo, SafeEncoder.encode("s")); + assertNull(bscore); } @Test public void zcount() { - jedis.zadd("foo", 1d, "a"); - jedis.zadd("foo", 10d, "b"); - jedis.zadd("foo", 0.1d, "c"); - jedis.zadd("foo", 2d, "a"); + jedis.zadd("foo", 1d, "a"); + jedis.zadd("foo", 10d, "b"); + jedis.zadd("foo", 0.1d, "c"); + jedis.zadd("foo", 2d, "a"); - long result = jedis.zcount("foo", 0.01d, 2.1d); + long result = jedis.zcount("foo", 0.01d, 2.1d); - assertEquals(2, result); + assertEquals(2, result); - result = jedis.zcount("foo", "(0.01", "+inf"); + result = jedis.zcount("foo", "(0.01", "+inf"); - assertEquals(3, result); - - // Binary - jedis.zadd(bfoo, 1d, ba); - jedis.zadd(bfoo, 10d, bb); - jedis.zadd(bfoo, 0.1d, bc); - jedis.zadd(bfoo, 2d, ba); + assertEquals(3, result); - long bresult = jedis.zcount(bfoo, 0.01d, 2.1d); + // Binary + jedis.zadd(bfoo, 1d, ba); + jedis.zadd(bfoo, 10d, bb); + jedis.zadd(bfoo, 0.1d, bc); + jedis.zadd(bfoo, 2d, ba); - assertEquals(2, bresult); + long bresult = jedis.zcount(bfoo, 0.01d, 2.1d); - bresult = jedis.zcount(bfoo, SafeEncoder.encode("(0.01"), SafeEncoder.encode("+inf")); + assertEquals(2, bresult); - assertEquals(3, bresult); + bresult = jedis.zcount(bfoo, SafeEncoder.encode("(0.01"), + SafeEncoder.encode("+inf")); + + assertEquals(3, bresult); } @Test public void zrangebyscore() { - jedis.zadd("foo", 1d, "a"); - jedis.zadd("foo", 10d, "b"); - jedis.zadd("foo", 0.1d, "c"); - jedis.zadd("foo", 2d, "a"); + jedis.zadd("foo", 1d, "a"); + jedis.zadd("foo", 10d, "b"); + jedis.zadd("foo", 0.1d, "c"); + jedis.zadd("foo", 2d, "a"); - Set range = jedis.zrangeByScore("foo", 0d, 2d); + Set range = jedis.zrangeByScore("foo", 0d, 2d); - Set expected = new LinkedHashSet(); - expected.add("c"); - expected.add("a"); + Set expected = new LinkedHashSet(); + expected.add("c"); + expected.add("a"); - assertEquals(expected, range); + assertEquals(expected, range); - range = jedis.zrangeByScore("foo", 0d, 2d, 0, 1); + range = jedis.zrangeByScore("foo", 0d, 2d, 0, 1); - expected = new LinkedHashSet(); - expected.add("c"); + expected = new LinkedHashSet(); + expected.add("c"); - assertEquals(expected, range); + assertEquals(expected, range); - range = jedis.zrangeByScore("foo", 0d, 2d, 1, 1); - Set range2 = jedis.zrangeByScore("foo", "-inf", "(2"); - assertEquals(expected, range2); + range = jedis.zrangeByScore("foo", 0d, 2d, 1, 1); + Set range2 = jedis.zrangeByScore("foo", "-inf", "(2"); + assertEquals(expected, range2); - expected = new LinkedHashSet(); - expected.add("a"); + expected = new LinkedHashSet(); + expected.add("a"); - assertEquals(expected, range); + assertEquals(expected, range); - // Binary - jedis.zadd(bfoo, 1d, ba); - jedis.zadd(bfoo, 10d, bb); - jedis.zadd(bfoo, 0.1d, bc); - jedis.zadd(bfoo, 2d, ba); + // Binary + jedis.zadd(bfoo, 1d, ba); + jedis.zadd(bfoo, 10d, bb); + jedis.zadd(bfoo, 0.1d, bc); + jedis.zadd(bfoo, 2d, ba); - Set brange = jedis.zrangeByScore(bfoo, 0d, 2d); + Set brange = jedis.zrangeByScore(bfoo, 0d, 2d); - Set bexpected = new LinkedHashSet(); - bexpected.add(bc); - bexpected.add(ba); + Set bexpected = new LinkedHashSet(); + bexpected.add(bc); + bexpected.add(ba); - assertEquals(bexpected, brange); + assertEquals(bexpected, brange); - brange = jedis.zrangeByScore(bfoo, 0d, 2d, 0, 1); + brange = jedis.zrangeByScore(bfoo, 0d, 2d, 0, 1); - bexpected = new LinkedHashSet(); - bexpected.add(bc); + bexpected = new LinkedHashSet(); + bexpected.add(bc); - assertEquals(bexpected, brange); + assertEquals(bexpected, brange); - brange = jedis.zrangeByScore(bfoo, 0d, 2d, 1, 1); - Set brange2 = jedis.zrangeByScore(bfoo, SafeEncoder - .encode("-inf"), SafeEncoder.encode("(2")); - assertEquals(bexpected, brange2); + brange = jedis.zrangeByScore(bfoo, 0d, 2d, 1, 1); + Set brange2 = jedis.zrangeByScore(bfoo, + SafeEncoder.encode("-inf"), SafeEncoder.encode("(2")); + assertEquals(bexpected, brange2); - bexpected = new LinkedHashSet(); - bexpected.add(ba); + bexpected = new LinkedHashSet(); + bexpected.add(ba); - assertEquals(bexpected, brange); + assertEquals(bexpected, brange); } @Test public void zrevrangebyscore() { - jedis.zadd("foo", 1.0d, "a"); - jedis.zadd("foo", 2.0d, "b"); - jedis.zadd("foo", 3.0d, "c"); - jedis.zadd("foo", 4.0d, "d"); - jedis.zadd("foo", 5.0d, "e"); + jedis.zadd("foo", 1.0d, "a"); + jedis.zadd("foo", 2.0d, "b"); + jedis.zadd("foo", 3.0d, "c"); + jedis.zadd("foo", 4.0d, "d"); + jedis.zadd("foo", 5.0d, "e"); - Set range = jedis.zrevrangeByScore("foo", 3d, - Double.NEGATIVE_INFINITY, 0, 1); - Set expected = new LinkedHashSet(); - expected.add("c"); + Set range = jedis.zrevrangeByScore("foo", 3d, + Double.NEGATIVE_INFINITY, 0, 1); + Set expected = new LinkedHashSet(); + expected.add("c"); - assertEquals(expected, range); + assertEquals(expected, range); - range = jedis.zrevrangeByScore("foo", 3.5d, Double.NEGATIVE_INFINITY, - 0, 2); - expected = new LinkedHashSet(); - expected.add("c"); - expected.add("b"); + range = jedis.zrevrangeByScore("foo", 3.5d, Double.NEGATIVE_INFINITY, + 0, 2); + expected = new LinkedHashSet(); + expected.add("c"); + expected.add("b"); - assertEquals(expected, range); + assertEquals(expected, range); - range = jedis.zrevrangeByScore("foo", 3.5d, Double.NEGATIVE_INFINITY, - 1, 1); - expected = new LinkedHashSet(); - expected.add("b"); + range = jedis.zrevrangeByScore("foo", 3.5d, Double.NEGATIVE_INFINITY, + 1, 1); + expected = new LinkedHashSet(); + expected.add("b"); - assertEquals(expected, range); + assertEquals(expected, range); - range = jedis.zrevrangeByScore("foo", 4d, 2d); - expected = new LinkedHashSet(); - expected.add("d"); - expected.add("c"); - expected.add("b"); + range = jedis.zrevrangeByScore("foo", 4d, 2d); + expected = new LinkedHashSet(); + expected.add("d"); + expected.add("c"); + expected.add("b"); - assertEquals(expected, range); + assertEquals(expected, range); - range = jedis.zrevrangeByScore("foo", "+inf", "(4"); - expected = new LinkedHashSet(); - expected.add("e"); + range = jedis.zrevrangeByScore("foo", "+inf", "(4"); + expected = new LinkedHashSet(); + expected.add("e"); - assertEquals(expected, range); + assertEquals(expected, range); - // Binary - jedis.zadd(bfoo, 1d, ba); - jedis.zadd(bfoo, 10d, bb); - jedis.zadd(bfoo, 0.1d, bc); - jedis.zadd(bfoo, 2d, ba); + // Binary + jedis.zadd(bfoo, 1d, ba); + jedis.zadd(bfoo, 10d, bb); + jedis.zadd(bfoo, 0.1d, bc); + jedis.zadd(bfoo, 2d, ba); - Set brange = jedis.zrevrangeByScore(bfoo, 2d, 0d); + Set brange = jedis.zrevrangeByScore(bfoo, 2d, 0d); - Set bexpected = new LinkedHashSet(); - bexpected.add(bc); - bexpected.add(ba); + Set bexpected = new LinkedHashSet(); + bexpected.add(bc); + bexpected.add(ba); - assertEquals(bexpected, brange); + assertEquals(bexpected, brange); - brange = jedis.zrevrangeByScore(bfoo, 2d, 0d, 0, 1); + brange = jedis.zrevrangeByScore(bfoo, 2d, 0d, 0, 1); - bexpected = new LinkedHashSet(); - bexpected.add(ba); + bexpected = new LinkedHashSet(); + bexpected.add(ba); - assertEquals(bexpected, brange); + assertEquals(bexpected, brange); - Set brange2 = jedis.zrevrangeByScore(bfoo, SafeEncoder - .encode("+inf"), SafeEncoder.encode("(2")); + Set brange2 = jedis.zrevrangeByScore(bfoo, + SafeEncoder.encode("+inf"), SafeEncoder.encode("(2")); - bexpected = new LinkedHashSet(); - bexpected.add(bb); + bexpected = new LinkedHashSet(); + bexpected.add(bb); - assertEquals(bexpected, brange2); + assertEquals(bexpected, brange2); - brange = jedis.zrevrangeByScore(bfoo, 2d, 0d, 1, 1); - bexpected = new LinkedHashSet(); - bexpected.add(bc); + brange = jedis.zrevrangeByScore(bfoo, 2d, 0d, 1, 1); + bexpected = new LinkedHashSet(); + bexpected.add(bc); - assertEquals(bexpected, brange); + assertEquals(bexpected, brange); } @Test public void zrangebyscoreWithScores() { - jedis.zadd("foo", 1d, "a"); - jedis.zadd("foo", 10d, "b"); - jedis.zadd("foo", 0.1d, "c"); - jedis.zadd("foo", 2d, "a"); + jedis.zadd("foo", 1d, "a"); + jedis.zadd("foo", 10d, "b"); + jedis.zadd("foo", 0.1d, "c"); + jedis.zadd("foo", 2d, "a"); - Set range = jedis.zrangeByScoreWithScores("foo", 0d, 2d); + Set range = jedis.zrangeByScoreWithScores("foo", 0d, 2d); - Set expected = new LinkedHashSet(); - expected.add(new Tuple("c", 0.1d)); - expected.add(new Tuple("a", 2d)); + Set expected = new LinkedHashSet(); + expected.add(new Tuple("c", 0.1d)); + expected.add(new Tuple("a", 2d)); - assertEquals(expected, range); + assertEquals(expected, range); - range = jedis.zrangeByScoreWithScores("foo", 0d, 2d, 0, 1); + range = jedis.zrangeByScoreWithScores("foo", 0d, 2d, 0, 1); - expected = new LinkedHashSet(); - expected.add(new Tuple("c", 0.1d)); + expected = new LinkedHashSet(); + expected.add(new Tuple("c", 0.1d)); - assertEquals(expected, range); + assertEquals(expected, range); - range = jedis.zrangeByScoreWithScores("foo", 0d, 2d, 1, 1); + range = jedis.zrangeByScoreWithScores("foo", 0d, 2d, 1, 1); - expected = new LinkedHashSet(); - expected.add(new Tuple("a", 2d)); + expected = new LinkedHashSet(); + expected.add(new Tuple("a", 2d)); - assertEquals(expected, range); + assertEquals(expected, range); - // Binary + // Binary - jedis.zadd(bfoo, 1d, ba); - jedis.zadd(bfoo, 10d, bb); - jedis.zadd(bfoo, 0.1d, bc); - jedis.zadd(bfoo, 2d, ba); + jedis.zadd(bfoo, 1d, ba); + jedis.zadd(bfoo, 10d, bb); + jedis.zadd(bfoo, 0.1d, bc); + jedis.zadd(bfoo, 2d, ba); - Set brange = jedis.zrangeByScoreWithScores(bfoo, 0d, 2d); + Set brange = jedis.zrangeByScoreWithScores(bfoo, 0d, 2d); - Set bexpected = new LinkedHashSet(); - bexpected.add(new Tuple(bc, 0.1d)); - bexpected.add(new Tuple(ba, 2d)); + Set bexpected = new LinkedHashSet(); + bexpected.add(new Tuple(bc, 0.1d)); + bexpected.add(new Tuple(ba, 2d)); - assertEquals(bexpected, brange); + assertEquals(bexpected, brange); - brange = jedis.zrangeByScoreWithScores(bfoo, 0d, 2d, 0, 1); + brange = jedis.zrangeByScoreWithScores(bfoo, 0d, 2d, 0, 1); - bexpected = new LinkedHashSet(); - bexpected.add(new Tuple(bc, 0.1d)); + bexpected = new LinkedHashSet(); + bexpected.add(new Tuple(bc, 0.1d)); - assertEquals(bexpected, brange); + assertEquals(bexpected, brange); - brange = jedis.zrangeByScoreWithScores(bfoo, 0d, 2d, 1, 1); + brange = jedis.zrangeByScoreWithScores(bfoo, 0d, 2d, 1, 1); - bexpected = new LinkedHashSet(); - bexpected.add(new Tuple(ba, 2d)); + bexpected = new LinkedHashSet(); + bexpected.add(new Tuple(ba, 2d)); - assertEquals(bexpected, brange); + assertEquals(bexpected, brange); } @Test public void zrevrangebyscoreWithScores() { - jedis.zadd("foo", 1.0d, "a"); - jedis.zadd("foo", 2.0d, "b"); - jedis.zadd("foo", 3.0d, "c"); - jedis.zadd("foo", 4.0d, "d"); - jedis.zadd("foo", 5.0d, "e"); + jedis.zadd("foo", 1.0d, "a"); + jedis.zadd("foo", 2.0d, "b"); + jedis.zadd("foo", 3.0d, "c"); + jedis.zadd("foo", 4.0d, "d"); + jedis.zadd("foo", 5.0d, "e"); - Set range = jedis.zrevrangeByScoreWithScores("foo", 3d, - Double.NEGATIVE_INFINITY, 0, 1); - Set expected = new LinkedHashSet(); - expected.add(new Tuple("c", 3.0d)); + Set range = jedis.zrevrangeByScoreWithScores("foo", 3d, + Double.NEGATIVE_INFINITY, 0, 1); + Set expected = new LinkedHashSet(); + expected.add(new Tuple("c", 3.0d)); - assertEquals(expected, range); + assertEquals(expected, range); - range = jedis.zrevrangeByScoreWithScores("foo", 3.5d, - Double.NEGATIVE_INFINITY, 0, 2); - expected = new LinkedHashSet(); - expected.add(new Tuple("c", 3.0d)); - expected.add(new Tuple("b", 2.0d)); + range = jedis.zrevrangeByScoreWithScores("foo", 3.5d, + Double.NEGATIVE_INFINITY, 0, 2); + expected = new LinkedHashSet(); + expected.add(new Tuple("c", 3.0d)); + expected.add(new Tuple("b", 2.0d)); - assertEquals(expected, range); + assertEquals(expected, range); - range = jedis.zrevrangeByScoreWithScores("foo", 3.5d, - Double.NEGATIVE_INFINITY, 1, 1); - expected = new LinkedHashSet(); - expected.add(new Tuple("b", 2.0d)); + range = jedis.zrevrangeByScoreWithScores("foo", 3.5d, + Double.NEGATIVE_INFINITY, 1, 1); + expected = new LinkedHashSet(); + expected.add(new Tuple("b", 2.0d)); - assertEquals(expected, range); + assertEquals(expected, range); - range = jedis.zrevrangeByScoreWithScores("foo", 4d, 2d); - expected = new LinkedHashSet(); - expected.add(new Tuple("d", 4.0d)); - expected.add(new Tuple("c", 3.0d)); - expected.add(new Tuple("b", 2.0d)); + range = jedis.zrevrangeByScoreWithScores("foo", 4d, 2d); + expected = new LinkedHashSet(); + expected.add(new Tuple("d", 4.0d)); + expected.add(new Tuple("c", 3.0d)); + expected.add(new Tuple("b", 2.0d)); - assertEquals(expected, range); + assertEquals(expected, range); - // Binary - jedis.zadd(bfoo, 1d, ba); - jedis.zadd(bfoo, 10d, bb); - jedis.zadd(bfoo, 0.1d, bc); - jedis.zadd(bfoo, 2d, ba); + // Binary + jedis.zadd(bfoo, 1d, ba); + jedis.zadd(bfoo, 10d, bb); + jedis.zadd(bfoo, 0.1d, bc); + jedis.zadd(bfoo, 2d, ba); - Set brange = jedis.zrevrangeByScoreWithScores(bfoo, 2d, 0d); + Set brange = jedis.zrevrangeByScoreWithScores(bfoo, 2d, 0d); - Set bexpected = new LinkedHashSet(); - bexpected.add(new Tuple(bc, 0.1d)); - bexpected.add(new Tuple(ba, 2d)); + Set bexpected = new LinkedHashSet(); + bexpected.add(new Tuple(bc, 0.1d)); + bexpected.add(new Tuple(ba, 2d)); - assertEquals(bexpected, brange); + assertEquals(bexpected, brange); - brange = jedis.zrevrangeByScoreWithScores(bfoo, 2d, 0d, 0, 1); + brange = jedis.zrevrangeByScoreWithScores(bfoo, 2d, 0d, 0, 1); - bexpected = new LinkedHashSet(); - bexpected.add(new Tuple(ba, 2d)); + bexpected = new LinkedHashSet(); + bexpected.add(new Tuple(ba, 2d)); - assertEquals(bexpected, brange); + assertEquals(bexpected, brange); - brange = jedis.zrevrangeByScoreWithScores(bfoo, 2d, 0d, 1, 1); + brange = jedis.zrevrangeByScoreWithScores(bfoo, 2d, 0d, 1, 1); - bexpected = new LinkedHashSet(); - bexpected.add(new Tuple(bc, 0.1d)); + bexpected = new LinkedHashSet(); + bexpected.add(new Tuple(bc, 0.1d)); - assertEquals(bexpected, brange); + assertEquals(bexpected, brange); } - + @Test public void zremrangeByRank() { - jedis.zadd("foo", 1d, "a"); - jedis.zadd("foo", 10d, "b"); - jedis.zadd("foo", 0.1d, "c"); - jedis.zadd("foo", 2d, "a"); + jedis.zadd("foo", 1d, "a"); + jedis.zadd("foo", 10d, "b"); + jedis.zadd("foo", 0.1d, "c"); + jedis.zadd("foo", 2d, "a"); - long result = jedis.zremrangeByRank("foo", 0, 0); + long result = jedis.zremrangeByRank("foo", 0, 0); - assertEquals(1, result); + assertEquals(1, result); - Set expected = new LinkedHashSet(); - expected.add("a"); - expected.add("b"); + Set expected = new LinkedHashSet(); + expected.add("a"); + expected.add("b"); - assertEquals(expected, jedis.zrange("foo", 0, 100)); + assertEquals(expected, jedis.zrange("foo", 0, 100)); - // Binary - jedis.zadd(bfoo, 1d, ba); - jedis.zadd(bfoo, 10d, bb); - jedis.zadd(bfoo, 0.1d, bc); - jedis.zadd(bfoo, 2d, ba); + // Binary + jedis.zadd(bfoo, 1d, ba); + jedis.zadd(bfoo, 10d, bb); + jedis.zadd(bfoo, 0.1d, bc); + jedis.zadd(bfoo, 2d, ba); - long bresult = jedis.zremrangeByRank(bfoo, 0, 0); + long bresult = jedis.zremrangeByRank(bfoo, 0, 0); - assertEquals(1, bresult); + assertEquals(1, bresult); - Set bexpected = new LinkedHashSet(); - bexpected.add(ba); - bexpected.add(bb); + Set bexpected = new LinkedHashSet(); + bexpected.add(ba); + bexpected.add(bb); - assertEquals(bexpected, jedis.zrange(bfoo, 0, 100)); + assertEquals(bexpected, jedis.zrange(bfoo, 0, 100)); } @Test public void zremrangeByScore() { - jedis.zadd("foo", 1d, "a"); - jedis.zadd("foo", 10d, "b"); - jedis.zadd("foo", 0.1d, "c"); - jedis.zadd("foo", 2d, "a"); + jedis.zadd("foo", 1d, "a"); + jedis.zadd("foo", 10d, "b"); + jedis.zadd("foo", 0.1d, "c"); + jedis.zadd("foo", 2d, "a"); - long result = jedis.zremrangeByScore("foo", 0, 2); + long result = jedis.zremrangeByScore("foo", 0, 2); - assertEquals(2, result); + assertEquals(2, result); - Set expected = new LinkedHashSet(); - expected.add("b"); + Set expected = new LinkedHashSet(); + expected.add("b"); - assertEquals(expected, jedis.zrange("foo", 0, 100)); + assertEquals(expected, jedis.zrange("foo", 0, 100)); - // Binary - jedis.zadd(bfoo, 1d, ba); - jedis.zadd(bfoo, 10d, bb); - jedis.zadd(bfoo, 0.1d, bc); - jedis.zadd(bfoo, 2d, ba); + // Binary + jedis.zadd(bfoo, 1d, ba); + jedis.zadd(bfoo, 10d, bb); + jedis.zadd(bfoo, 0.1d, bc); + jedis.zadd(bfoo, 2d, ba); - long bresult = jedis.zremrangeByScore(bfoo, 0, 2); + long bresult = jedis.zremrangeByScore(bfoo, 0, 2); - assertEquals(2, bresult); + assertEquals(2, bresult); - Set bexpected = new LinkedHashSet(); - bexpected.add(bb); + Set bexpected = new LinkedHashSet(); + bexpected.add(bb); - assertEquals(bexpected, jedis.zrange(bfoo, 0, 100)); + assertEquals(bexpected, jedis.zrange(bfoo, 0, 100)); } @Test public void zunionstore() { - jedis.zadd("foo", 1, "a"); - jedis.zadd("foo", 2, "b"); - jedis.zadd("bar", 2, "a"); - jedis.zadd("bar", 2, "b"); + jedis.zadd("foo", 1, "a"); + jedis.zadd("foo", 2, "b"); + jedis.zadd("bar", 2, "a"); + jedis.zadd("bar", 2, "b"); - long result = jedis.zunionstore("dst", "foo", "bar"); + long result = jedis.zunionstore("dst", "foo", "bar"); - assertEquals(2, result); + assertEquals(2, result); - Set expected = new LinkedHashSet(); - expected.add(new Tuple("b", new Double(4))); - expected.add(new Tuple("a", new Double(3))); + Set expected = new LinkedHashSet(); + expected.add(new Tuple("b", new Double(4))); + expected.add(new Tuple("a", new Double(3))); - assertEquals(expected, jedis.zrangeWithScores("dst", 0, 100)); + assertEquals(expected, jedis.zrangeWithScores("dst", 0, 100)); - // Binary - jedis.zadd(bfoo, 1, ba); - jedis.zadd(bfoo, 2, bb); - jedis.zadd(bbar, 2, ba); - jedis.zadd(bbar, 2, bb); + // Binary + jedis.zadd(bfoo, 1, ba); + jedis.zadd(bfoo, 2, bb); + jedis.zadd(bbar, 2, ba); + jedis.zadd(bbar, 2, bb); - long bresult = jedis.zunionstore(SafeEncoder.encode("dst"), bfoo, bbar); + long bresult = jedis.zunionstore(SafeEncoder.encode("dst"), bfoo, bbar); - assertEquals(2, bresult); + assertEquals(2, bresult); - Set bexpected = new LinkedHashSet(); - bexpected.add(new Tuple(bb, new Double(4))); - bexpected.add(new Tuple(ba, new Double(3))); + Set bexpected = new LinkedHashSet(); + bexpected.add(new Tuple(bb, new Double(4))); + bexpected.add(new Tuple(ba, new Double(3))); - assertEquals(bexpected, jedis.zrangeWithScores(SafeEncoder - .encode("dst"), 0, 100)); + assertEquals(bexpected, + jedis.zrangeWithScores(SafeEncoder.encode("dst"), 0, 100)); } @Test public void zunionstoreParams() { - jedis.zadd("foo", 1, "a"); - jedis.zadd("foo", 2, "b"); - jedis.zadd("bar", 2, "a"); - jedis.zadd("bar", 2, "b"); + jedis.zadd("foo", 1, "a"); + jedis.zadd("foo", 2, "b"); + jedis.zadd("bar", 2, "a"); + jedis.zadd("bar", 2, "b"); - ZParams params = new ZParams(); - params.weights(2, 2); - params.aggregate(ZParams.Aggregate.SUM); - long result = jedis.zunionstore("dst", params, "foo", "bar"); + ZParams params = new ZParams(); + params.weights(2, 2); + params.aggregate(ZParams.Aggregate.SUM); + long result = jedis.zunionstore("dst", params, "foo", "bar"); - assertEquals(2, result); + assertEquals(2, result); - Set expected = new LinkedHashSet(); - expected.add(new Tuple("b", new Double(8))); - expected.add(new Tuple("a", new Double(6))); + Set expected = new LinkedHashSet(); + expected.add(new Tuple("b", new Double(8))); + expected.add(new Tuple("a", new Double(6))); - assertEquals(expected, jedis.zrangeWithScores("dst", 0, 100)); + assertEquals(expected, jedis.zrangeWithScores("dst", 0, 100)); - // Binary - jedis.zadd(bfoo, 1, ba); - jedis.zadd(bfoo, 2, bb); - jedis.zadd(bbar, 2, ba); - jedis.zadd(bbar, 2, bb); + // Binary + jedis.zadd(bfoo, 1, ba); + jedis.zadd(bfoo, 2, bb); + jedis.zadd(bbar, 2, ba); + jedis.zadd(bbar, 2, bb); - ZParams bparams = new ZParams(); - bparams.weights(2, 2); - bparams.aggregate(ZParams.Aggregate.SUM); - long bresult = jedis.zunionstore(SafeEncoder.encode("dst"), bparams, - bfoo, bbar); + ZParams bparams = new ZParams(); + bparams.weights(2, 2); + bparams.aggregate(ZParams.Aggregate.SUM); + long bresult = jedis.zunionstore(SafeEncoder.encode("dst"), bparams, + bfoo, bbar); - assertEquals(2, bresult); + assertEquals(2, bresult); - Set bexpected = new LinkedHashSet(); - bexpected.add(new Tuple(bb, new Double(8))); - bexpected.add(new Tuple(ba, new Double(6))); + Set bexpected = new LinkedHashSet(); + bexpected.add(new Tuple(bb, new Double(8))); + bexpected.add(new Tuple(ba, new Double(6))); - assertEquals(bexpected, jedis.zrangeWithScores(SafeEncoder - .encode("dst"), 0, 100)); + assertEquals(bexpected, + jedis.zrangeWithScores(SafeEncoder.encode("dst"), 0, 100)); } @Test public void zinterstore() { - jedis.zadd("foo", 1, "a"); - jedis.zadd("foo", 2, "b"); - jedis.zadd("bar", 2, "a"); + jedis.zadd("foo", 1, "a"); + jedis.zadd("foo", 2, "b"); + jedis.zadd("bar", 2, "a"); - long result = jedis.zinterstore("dst", "foo", "bar"); + long result = jedis.zinterstore("dst", "foo", "bar"); - assertEquals(1, result); + assertEquals(1, result); - Set expected = new LinkedHashSet(); - expected.add(new Tuple("a", new Double(3))); + Set expected = new LinkedHashSet(); + expected.add(new Tuple("a", new Double(3))); - assertEquals(expected, jedis.zrangeWithScores("dst", 0, 100)); + assertEquals(expected, jedis.zrangeWithScores("dst", 0, 100)); - // Binary - jedis.zadd(bfoo, 1, ba); - jedis.zadd(bfoo, 2, bb); - jedis.zadd(bbar, 2, ba); + // Binary + jedis.zadd(bfoo, 1, ba); + jedis.zadd(bfoo, 2, bb); + jedis.zadd(bbar, 2, ba); - long bresult = jedis.zinterstore(SafeEncoder.encode("dst"), bfoo, bbar); + long bresult = jedis.zinterstore(SafeEncoder.encode("dst"), bfoo, bbar); - assertEquals(1, bresult); + assertEquals(1, bresult); - Set bexpected = new LinkedHashSet(); - bexpected.add(new Tuple(ba, new Double(3))); + Set bexpected = new LinkedHashSet(); + bexpected.add(new Tuple(ba, new Double(3))); - assertEquals(bexpected, jedis.zrangeWithScores(SafeEncoder - .encode("dst"), 0, 100)); + assertEquals(bexpected, + jedis.zrangeWithScores(SafeEncoder.encode("dst"), 0, 100)); } @Test public void zintertoreParams() { - jedis.zadd("foo", 1, "a"); - jedis.zadd("foo", 2, "b"); - jedis.zadd("bar", 2, "a"); + jedis.zadd("foo", 1, "a"); + jedis.zadd("foo", 2, "b"); + jedis.zadd("bar", 2, "a"); - ZParams params = new ZParams(); - params.weights(2, 2); - params.aggregate(ZParams.Aggregate.SUM); - long result = jedis.zinterstore("dst", params, "foo", "bar"); + ZParams params = new ZParams(); + params.weights(2, 2); + params.aggregate(ZParams.Aggregate.SUM); + long result = jedis.zinterstore("dst", params, "foo", "bar"); - assertEquals(1, result); + assertEquals(1, result); - Set expected = new LinkedHashSet(); - expected.add(new Tuple("a", new Double(6))); + Set expected = new LinkedHashSet(); + expected.add(new Tuple("a", new Double(6))); - assertEquals(expected, jedis.zrangeWithScores("dst", 0, 100)); + assertEquals(expected, jedis.zrangeWithScores("dst", 0, 100)); - // Binary - jedis.zadd(bfoo, 1, ba); - jedis.zadd(bfoo, 2, bb); - jedis.zadd(bbar, 2, ba); + // Binary + jedis.zadd(bfoo, 1, ba); + jedis.zadd(bfoo, 2, bb); + jedis.zadd(bbar, 2, ba); - ZParams bparams = new ZParams(); - bparams.weights(2, 2); - bparams.aggregate(ZParams.Aggregate.SUM); - long bresult = jedis.zinterstore(SafeEncoder.encode("dst"), bparams, - bfoo, bbar); + ZParams bparams = new ZParams(); + bparams.weights(2, 2); + bparams.aggregate(ZParams.Aggregate.SUM); + long bresult = jedis.zinterstore(SafeEncoder.encode("dst"), bparams, + bfoo, bbar); - assertEquals(1, bresult); + assertEquals(1, bresult); - Set bexpected = new LinkedHashSet(); - bexpected.add(new Tuple(ba, new Double(6))); + Set bexpected = new LinkedHashSet(); + bexpected.add(new Tuple(ba, new Double(6))); - assertEquals(bexpected, jedis.zrangeWithScores(SafeEncoder - .encode("dst"), 0, 100)); + assertEquals(bexpected, + jedis.zrangeWithScores(SafeEncoder.encode("dst"), 0, 100)); } @Test public void tupleCompare() { - Tuple t1 = new Tuple("foo", 1d); - Tuple t2 = new Tuple("bar", 2d); + Tuple t1 = new Tuple("foo", 1d); + Tuple t2 = new Tuple("bar", 2d); - assertEquals(-1, t1.compareTo(t2)); - assertEquals(1, t2.compareTo(t1)); - assertEquals(0, t2.compareTo(t2)); + assertEquals(-1, t1.compareTo(t2)); + assertEquals(1, t2.compareTo(t1)); + assertEquals(0, t2.compareTo(t2)); + } + + @Test + public void zscan() { + jedis.zadd("foo", 1, "a"); + jedis.zadd("foo", 2, "b"); + + ScanResult result = jedis.zscan("foo", 0); + + assertEquals(0, result.getCursor()); + assertFalse(result.getResult().isEmpty()); + } + + @Test + public void zscanMatch() { + ScanParams params = new ScanParams(); + params.match("a*"); + + jedis.zadd("foo", 2, "b"); + jedis.zadd("foo", 1, "a"); + jedis.zadd("foo", 11, "aa"); + ScanResult result = jedis.zscan("foo", 0, params); + + assertEquals(0, result.getCursor()); + assertFalse(result.getResult().isEmpty()); + } + + @Test + public void zscanCount() { + ScanParams params = new ScanParams(); + params.count(2); + + jedis.zadd("foo", 1, "a1"); + jedis.zadd("foo", 2, "a2"); + jedis.zadd("foo", 3, "a3"); + jedis.zadd("foo", 4, "a4"); + jedis.zadd("foo", 5, "a5"); + + ScanResult result = jedis.zscan("foo", 0, params); + + assertFalse(result.getResult().isEmpty()); } } \ No newline at end of file diff --git a/src/test/java/redis/clients/jedis/tests/commands/SortingCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/SortingCommandsTest.java index 10d8965..543dacb 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/SortingCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/SortingCommandsTest.java @@ -25,277 +25,277 @@ public class SortingCommandsTest extends JedisCommandTestBase { @Test public void sort() { - jedis.lpush("foo", "3"); - jedis.lpush("foo", "2"); - jedis.lpush("foo", "1"); + jedis.lpush("foo", "3"); + jedis.lpush("foo", "2"); + jedis.lpush("foo", "1"); - List result = jedis.sort("foo"); + List result = jedis.sort("foo"); - List expected = new ArrayList(); - expected.add("1"); - expected.add("2"); - expected.add("3"); + List expected = new ArrayList(); + expected.add("1"); + expected.add("2"); + expected.add("3"); - assertEquals(expected, result); + assertEquals(expected, result); - // Binary - jedis.lpush(bfoo, b3); - jedis.lpush(bfoo, b2); - jedis.lpush(bfoo, b1); + // Binary + jedis.lpush(bfoo, b3); + jedis.lpush(bfoo, b2); + jedis.lpush(bfoo, b1); - List bresult = jedis.sort(bfoo); + List bresult = jedis.sort(bfoo); - List bexpected = new ArrayList(); - bexpected.add(b1); - bexpected.add(b2); - bexpected.add(b3); + List bexpected = new ArrayList(); + bexpected.add(b1); + bexpected.add(b2); + bexpected.add(b3); - assertEquals(bexpected, bresult); + assertEquals(bexpected, bresult); } @Test public void sortBy() { - jedis.lpush("foo", "2"); - jedis.lpush("foo", "3"); - jedis.lpush("foo", "1"); + jedis.lpush("foo", "2"); + jedis.lpush("foo", "3"); + jedis.lpush("foo", "1"); - jedis.set("bar1", "3"); - jedis.set("bar2", "2"); - jedis.set("bar3", "1"); + jedis.set("bar1", "3"); + jedis.set("bar2", "2"); + jedis.set("bar3", "1"); - SortingParams sp = new SortingParams(); - sp.by("bar*"); + SortingParams sp = new SortingParams(); + sp.by("bar*"); - List result = jedis.sort("foo", sp); + List result = jedis.sort("foo", sp); - List expected = new ArrayList(); - expected.add("3"); - expected.add("2"); - expected.add("1"); + List expected = new ArrayList(); + expected.add("3"); + expected.add("2"); + expected.add("1"); - assertEquals(expected, result); + assertEquals(expected, result); - // Binary - jedis.lpush(bfoo, b2); - jedis.lpush(bfoo, b3); - jedis.lpush(bfoo, b1); + // Binary + jedis.lpush(bfoo, b2); + jedis.lpush(bfoo, b3); + jedis.lpush(bfoo, b1); - jedis.set(bbar1, b3); - jedis.set(bbar2, b2); - jedis.set(bbar3, b1); + jedis.set(bbar1, b3); + jedis.set(bbar2, b2); + jedis.set(bbar3, b1); - SortingParams bsp = new SortingParams(); - bsp.by(bbarstar); + SortingParams bsp = new SortingParams(); + bsp.by(bbarstar); - List bresult = jedis.sort(bfoo, bsp); + List bresult = jedis.sort(bfoo, bsp); - List bexpected = new ArrayList(); - bexpected.add(b3); - bexpected.add(b2); - bexpected.add(b1); + List bexpected = new ArrayList(); + bexpected.add(b3); + bexpected.add(b2); + bexpected.add(b1); - assertEquals(bexpected, bresult); + assertEquals(bexpected, bresult); } @Test public void sortDesc() { - jedis.lpush("foo", "3"); - jedis.lpush("foo", "2"); - jedis.lpush("foo", "1"); + jedis.lpush("foo", "3"); + jedis.lpush("foo", "2"); + jedis.lpush("foo", "1"); - SortingParams sp = new SortingParams(); - sp.desc(); + SortingParams sp = new SortingParams(); + sp.desc(); - List result = jedis.sort("foo", sp); + List result = jedis.sort("foo", sp); - List expected = new ArrayList(); - expected.add("3"); - expected.add("2"); - expected.add("1"); + List expected = new ArrayList(); + expected.add("3"); + expected.add("2"); + expected.add("1"); - assertEquals(expected, result); + assertEquals(expected, result); - // Binary - jedis.lpush(bfoo, b3); - jedis.lpush(bfoo, b2); - jedis.lpush(bfoo, b1); + // Binary + jedis.lpush(bfoo, b3); + jedis.lpush(bfoo, b2); + jedis.lpush(bfoo, b1); - SortingParams bsp = new SortingParams(); - bsp.desc(); + SortingParams bsp = new SortingParams(); + bsp.desc(); - List bresult = jedis.sort(bfoo, bsp); + List bresult = jedis.sort(bfoo, bsp); - List bexpected = new ArrayList(); - bexpected.add(b3); - bexpected.add(b2); - bexpected.add(b1); + List bexpected = new ArrayList(); + bexpected.add(b3); + bexpected.add(b2); + bexpected.add(b1); - assertEquals(bexpected, bresult); + assertEquals(bexpected, bresult); } @Test public void sortLimit() { - for (int n = 10; n > 0; n--) { - jedis.lpush("foo", String.valueOf(n)); - } + for (int n = 10; n > 0; n--) { + jedis.lpush("foo", String.valueOf(n)); + } - SortingParams sp = new SortingParams(); - sp.limit(0, 3); + SortingParams sp = new SortingParams(); + sp.limit(0, 3); - List result = jedis.sort("foo", sp); + List result = jedis.sort("foo", sp); - List expected = new ArrayList(); - expected.add("1"); - expected.add("2"); - expected.add("3"); + List expected = new ArrayList(); + expected.add("1"); + expected.add("2"); + expected.add("3"); - assertEquals(expected, result); + assertEquals(expected, result); - // Binary - jedis.rpush(bfoo, new byte[] { (byte) '4' }); - jedis.rpush(bfoo, new byte[] { (byte) '3' }); - jedis.rpush(bfoo, new byte[] { (byte) '2' }); - jedis.rpush(bfoo, new byte[] { (byte) '1' }); + // Binary + jedis.rpush(bfoo, new byte[] { (byte) '4' }); + jedis.rpush(bfoo, new byte[] { (byte) '3' }); + jedis.rpush(bfoo, new byte[] { (byte) '2' }); + jedis.rpush(bfoo, new byte[] { (byte) '1' }); - SortingParams bsp = new SortingParams(); - bsp.limit(0, 3); + SortingParams bsp = new SortingParams(); + bsp.limit(0, 3); - List bresult = jedis.sort(bfoo, bsp); + List bresult = jedis.sort(bfoo, bsp); - List bexpected = new ArrayList(); - bexpected.add(b1); - bexpected.add(b2); - bexpected.add(b3); + List bexpected = new ArrayList(); + bexpected.add(b1); + bexpected.add(b2); + bexpected.add(b3); - assertEquals(bexpected, bresult); + assertEquals(bexpected, bresult); } @Test public void sortAlpha() { - jedis.lpush("foo", "1"); - jedis.lpush("foo", "2"); - jedis.lpush("foo", "10"); + jedis.lpush("foo", "1"); + jedis.lpush("foo", "2"); + jedis.lpush("foo", "10"); - SortingParams sp = new SortingParams(); - sp.alpha(); + SortingParams sp = new SortingParams(); + sp.alpha(); - List result = jedis.sort("foo", sp); + List result = jedis.sort("foo", sp); - List expected = new ArrayList(); - expected.add("1"); - expected.add("10"); - expected.add("2"); + List expected = new ArrayList(); + expected.add("1"); + expected.add("10"); + expected.add("2"); - assertEquals(expected, result); + assertEquals(expected, result); - // Binary - jedis.lpush(bfoo, b1); - jedis.lpush(bfoo, b2); - jedis.lpush(bfoo, b10); + // Binary + jedis.lpush(bfoo, b1); + jedis.lpush(bfoo, b2); + jedis.lpush(bfoo, b10); - SortingParams bsp = new SortingParams(); - bsp.alpha(); + SortingParams bsp = new SortingParams(); + bsp.alpha(); - List bresult = jedis.sort(bfoo, bsp); + List bresult = jedis.sort(bfoo, bsp); - List bexpected = new ArrayList(); - bexpected.add(b1); - bexpected.add(b10); - bexpected.add(b2); + List bexpected = new ArrayList(); + bexpected.add(b1); + bexpected.add(b10); + bexpected.add(b2); - assertEquals(bexpected, bresult); + assertEquals(bexpected, bresult); } @Test public void sortGet() { - jedis.lpush("foo", "1"); - jedis.lpush("foo", "2"); - jedis.lpush("foo", "10"); + jedis.lpush("foo", "1"); + jedis.lpush("foo", "2"); + jedis.lpush("foo", "10"); - jedis.set("bar1", "bar1"); - jedis.set("bar2", "bar2"); - jedis.set("bar10", "bar10"); + jedis.set("bar1", "bar1"); + jedis.set("bar2", "bar2"); + jedis.set("bar10", "bar10"); - jedis.set("car1", "car1"); - jedis.set("car2", "car2"); - jedis.set("car10", "car10"); + jedis.set("car1", "car1"); + jedis.set("car2", "car2"); + jedis.set("car10", "car10"); - SortingParams sp = new SortingParams(); - sp.get("car*", "bar*"); + SortingParams sp = new SortingParams(); + sp.get("car*", "bar*"); - List result = jedis.sort("foo", sp); + List result = jedis.sort("foo", sp); - List expected = new ArrayList(); - expected.add("car1"); - expected.add("bar1"); - expected.add("car2"); - expected.add("bar2"); - expected.add("car10"); - expected.add("bar10"); + List expected = new ArrayList(); + expected.add("car1"); + expected.add("bar1"); + expected.add("car2"); + expected.add("bar2"); + expected.add("car10"); + expected.add("bar10"); - assertEquals(expected, result); + assertEquals(expected, result); - // Binary - jedis.lpush(bfoo, b1); - jedis.lpush(bfoo, b2); - jedis.lpush(bfoo, b10); + // Binary + jedis.lpush(bfoo, b1); + jedis.lpush(bfoo, b2); + jedis.lpush(bfoo, b10); - jedis.set(bbar1, bbar1); - jedis.set(bbar2, bbar2); - jedis.set(bbar10, bbar10); + jedis.set(bbar1, bbar1); + jedis.set(bbar2, bbar2); + jedis.set(bbar10, bbar10); - jedis.set(bcar1, bcar1); - jedis.set(bcar2, bcar2); - jedis.set(bcar10, bcar10); + jedis.set(bcar1, bcar1); + jedis.set(bcar2, bcar2); + jedis.set(bcar10, bcar10); - SortingParams bsp = new SortingParams(); - bsp.get(bcarstar, bbarstar); + SortingParams bsp = new SortingParams(); + bsp.get(bcarstar, bbarstar); - List bresult = jedis.sort(bfoo, bsp); + List bresult = jedis.sort(bfoo, bsp); - List bexpected = new ArrayList(); - bexpected.add(bcar1); - bexpected.add(bbar1); - bexpected.add(bcar2); - bexpected.add(bbar2); - bexpected.add(bcar10); - bexpected.add(bbar10); + List bexpected = new ArrayList(); + bexpected.add(bcar1); + bexpected.add(bbar1); + bexpected.add(bcar2); + bexpected.add(bbar2); + bexpected.add(bcar10); + bexpected.add(bbar10); - assertEquals(bexpected, bresult); + assertEquals(bexpected, bresult); } @Test public void sortStore() { - jedis.lpush("foo", "1"); - jedis.lpush("foo", "2"); - jedis.lpush("foo", "10"); + jedis.lpush("foo", "1"); + jedis.lpush("foo", "2"); + jedis.lpush("foo", "10"); - long result = jedis.sort("foo", "result"); + long result = jedis.sort("foo", "result"); - List expected = new ArrayList(); - expected.add("1"); - expected.add("2"); - expected.add("10"); + List expected = new ArrayList(); + expected.add("1"); + expected.add("2"); + expected.add("10"); - assertEquals(3, result); - assertEquals(expected, jedis.lrange("result", 0, 1000)); + assertEquals(3, result); + assertEquals(expected, jedis.lrange("result", 0, 1000)); - // Binary - jedis.lpush(bfoo, b1); - jedis.lpush(bfoo, b2); - jedis.lpush(bfoo, b10); + // Binary + jedis.lpush(bfoo, b1); + jedis.lpush(bfoo, b2); + jedis.lpush(bfoo, b10); - byte[] bkresult = new byte[] { 0X09, 0x0A, 0x0B, 0x0C }; - long bresult = jedis.sort(bfoo, bkresult); + byte[] bkresult = new byte[] { 0X09, 0x0A, 0x0B, 0x0C }; + long bresult = jedis.sort(bfoo, bkresult); - List bexpected = new ArrayList(); - bexpected.add(b1); - bexpected.add(b2); - bexpected.add(b10); + List bexpected = new ArrayList(); + bexpected.add(b1); + bexpected.add(b2); + bexpected.add(b10); - assertEquals(3, bresult); - assertEquals(bexpected, jedis.lrange(bkresult, 0, 1000)); + assertEquals(3, bresult); + assertEquals(bexpected, jedis.lrange(bkresult, 0, 1000)); } } \ No newline at end of file diff --git a/src/test/java/redis/clients/jedis/tests/commands/StringValuesCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/StringValuesCommandsTest.java index e34eb7b..625fcc9 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/StringValuesCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/StringValuesCommandsTest.java @@ -10,200 +10,200 @@ import redis.clients.jedis.exceptions.JedisDataException; public class StringValuesCommandsTest extends JedisCommandTestBase { @Test public void setAndGet() { - String status = jedis.set("foo", "bar"); - assertEquals("OK", status); + String status = jedis.set("foo", "bar"); + assertEquals("OK", status); - String value = jedis.get("foo"); - assertEquals("bar", value); + String value = jedis.get("foo"); + assertEquals("bar", value); - assertEquals(null, jedis.get("bar")); + assertEquals(null, jedis.get("bar")); } @Test public void getSet() { - String value = jedis.getSet("foo", "bar"); - assertEquals(null, value); - value = jedis.get("foo"); - assertEquals("bar", value); + String value = jedis.getSet("foo", "bar"); + assertEquals(null, value); + value = jedis.get("foo"); + assertEquals("bar", value); } @Test public void mget() { - List values = jedis.mget("foo", "bar"); - List expected = new ArrayList(); - expected.add(null); - expected.add(null); + List values = jedis.mget("foo", "bar"); + List expected = new ArrayList(); + expected.add(null); + expected.add(null); - assertEquals(expected, values); + assertEquals(expected, values); - jedis.set("foo", "bar"); + jedis.set("foo", "bar"); - expected = new ArrayList(); - expected.add("bar"); - expected.add(null); - values = jedis.mget("foo", "bar"); + expected = new ArrayList(); + expected.add("bar"); + expected.add(null); + values = jedis.mget("foo", "bar"); - assertEquals(expected, values); + assertEquals(expected, values); - jedis.set("bar", "foo"); + jedis.set("bar", "foo"); - expected = new ArrayList(); - expected.add("bar"); - expected.add("foo"); - values = jedis.mget("foo", "bar"); + expected = new ArrayList(); + expected.add("bar"); + expected.add("foo"); + values = jedis.mget("foo", "bar"); - assertEquals(expected, values); + assertEquals(expected, values); } @Test public void setnx() { - long status = jedis.setnx("foo", "bar"); - assertEquals(1, status); - assertEquals("bar", jedis.get("foo")); + long status = jedis.setnx("foo", "bar"); + assertEquals(1, status); + assertEquals("bar", jedis.get("foo")); - status = jedis.setnx("foo", "bar2"); - assertEquals(0, status); - assertEquals("bar", jedis.get("foo")); + status = jedis.setnx("foo", "bar2"); + assertEquals(0, status); + assertEquals("bar", jedis.get("foo")); } @Test public void setex() { - String status = jedis.setex("foo", 20, "bar"); - assertEquals("OK", status); - long ttl = jedis.ttl("foo"); - assertTrue(ttl > 0 && ttl <= 20); + String status = jedis.setex("foo", 20, "bar"); + assertEquals("OK", status); + long ttl = jedis.ttl("foo"); + assertTrue(ttl > 0 && ttl <= 20); } @Test public void mset() { - String status = jedis.mset("foo", "bar", "bar", "foo"); - assertEquals("OK", status); - assertEquals("bar", jedis.get("foo")); - assertEquals("foo", jedis.get("bar")); + String status = jedis.mset("foo", "bar", "bar", "foo"); + assertEquals("OK", status); + assertEquals("bar", jedis.get("foo")); + assertEquals("foo", jedis.get("bar")); } @Test public void msetnx() { - long status = jedis.msetnx("foo", "bar", "bar", "foo"); - assertEquals(1, status); - assertEquals("bar", jedis.get("foo")); - assertEquals("foo", jedis.get("bar")); + long status = jedis.msetnx("foo", "bar", "bar", "foo"); + assertEquals(1, status); + assertEquals("bar", jedis.get("foo")); + assertEquals("foo", jedis.get("bar")); - status = jedis.msetnx("foo", "bar1", "bar2", "foo2"); - assertEquals(0, status); - assertEquals("bar", jedis.get("foo")); - assertEquals("foo", jedis.get("bar")); + status = jedis.msetnx("foo", "bar1", "bar2", "foo2"); + assertEquals(0, status); + assertEquals("bar", jedis.get("foo")); + assertEquals("foo", jedis.get("bar")); } @Test(expected = JedisDataException.class) public void incrWrongValue() { - jedis.set("foo", "bar"); - jedis.incr("foo"); + jedis.set("foo", "bar"); + jedis.incr("foo"); } @Test public void incr() { - long value = jedis.incr("foo"); - assertEquals(1, value); - value = jedis.incr("foo"); - assertEquals(2, value); + long value = jedis.incr("foo"); + assertEquals(1, value); + value = jedis.incr("foo"); + assertEquals(2, value); } @Test(expected = JedisDataException.class) public void incrByWrongValue() { - jedis.set("foo", "bar"); - jedis.incrBy("foo", 2); + jedis.set("foo", "bar"); + jedis.incrBy("foo", 2); } @Test public void incrBy() { - long value = jedis.incrBy("foo", 2); - assertEquals(2, value); - value = jedis.incrBy("foo", 2); - assertEquals(4, value); + long value = jedis.incrBy("foo", 2); + assertEquals(2, value); + value = jedis.incrBy("foo", 2); + assertEquals(4, value); } @Test(expected = JedisDataException.class) public void decrWrongValue() { - jedis.set("foo", "bar"); - jedis.decr("foo"); + jedis.set("foo", "bar"); + jedis.decr("foo"); } @Test public void decr() { - long value = jedis.decr("foo"); - assertEquals(-1, value); - value = jedis.decr("foo"); - assertEquals(-2, value); + long value = jedis.decr("foo"); + assertEquals(-1, value); + value = jedis.decr("foo"); + assertEquals(-2, value); } @Test(expected = JedisDataException.class) public void decrByWrongValue() { - jedis.set("foo", "bar"); - jedis.decrBy("foo", 2); + jedis.set("foo", "bar"); + jedis.decrBy("foo", 2); } @Test public void decrBy() { - long value = jedis.decrBy("foo", 2); - assertEquals(-2, value); - value = jedis.decrBy("foo", 2); - assertEquals(-4, value); + long value = jedis.decrBy("foo", 2); + assertEquals(-2, value); + value = jedis.decrBy("foo", 2); + assertEquals(-4, value); } @Test public void append() { - long value = jedis.append("foo", "bar"); - assertEquals(3, value); - assertEquals("bar", jedis.get("foo")); - value = jedis.append("foo", "bar"); - assertEquals(6, value); - assertEquals("barbar", jedis.get("foo")); + long value = jedis.append("foo", "bar"); + assertEquals(3, value); + assertEquals("bar", jedis.get("foo")); + value = jedis.append("foo", "bar"); + assertEquals(6, value); + assertEquals("barbar", jedis.get("foo")); } @Test public void substr() { - jedis.set("s", "This is a string"); - assertEquals("This", jedis.substr("s", 0, 3)); - assertEquals("ing", jedis.substr("s", -3, -1)); - assertEquals("This is a string", jedis.substr("s", 0, -1)); - assertEquals(" string", jedis.substr("s", 9, 100000)); + jedis.set("s", "This is a string"); + assertEquals("This", jedis.substr("s", 0, 3)); + assertEquals("ing", jedis.substr("s", -3, -1)); + assertEquals("This is a string", jedis.substr("s", 0, -1)); + assertEquals(" string", jedis.substr("s", 9, 100000)); } @Test public void strlen() { - jedis.set("s", "This is a string"); - assertEquals("This is a string".length(), jedis.strlen("s").intValue()); + jedis.set("s", "This is a string"); + assertEquals("This is a string".length(), jedis.strlen("s").intValue()); } @Test public void incrLargeNumbers() { - long value = jedis.incr("foo"); - assertEquals(1, value); - assertEquals(1L + Integer.MAX_VALUE, (long) jedis.incrBy("foo", - Integer.MAX_VALUE)); + long value = jedis.incr("foo"); + assertEquals(1, value); + assertEquals(1L + Integer.MAX_VALUE, + (long) jedis.incrBy("foo", Integer.MAX_VALUE)); } @Test(expected = JedisDataException.class) public void incrReallyLargeNumbers() { - jedis.set("foo", Long.toString(Long.MAX_VALUE)); - long value = jedis.incr("foo"); - assertEquals(Long.MIN_VALUE, value); + jedis.set("foo", Long.toString(Long.MAX_VALUE)); + long value = jedis.incr("foo"); + assertEquals(Long.MIN_VALUE, value); } - + @Test public void incrByFloat() { - double value = jedis.incrByFloat("foo", 10.5); - assertEquals(10.5, value, 0.0); - value = jedis.incrByFloat("foo", 0.1); - assertEquals(10.6, value, 0.0); + double value = jedis.incrByFloat("foo", 10.5); + assertEquals(10.5, value, 0.0); + value = jedis.incrByFloat("foo", 0.1); + assertEquals(10.6, value, 0.0); } - + @Test public void psetex() { - String status = jedis.psetex("foo", 20000, "bar"); - assertEquals("OK", status); - long ttl = jedis.ttl("foo"); - assertTrue(ttl > 0 && ttl <= 20000); + String status = jedis.psetex("foo", 20000, "bar"); + assertEquals("OK", status); + long ttl = jedis.ttl("foo"); + assertTrue(ttl > 0 && ttl <= 20000); } } \ No newline at end of file diff --git a/src/test/java/redis/clients/jedis/tests/commands/TransactionCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/TransactionCommandsTest.java index 5e03270..cc36a7f 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/TransactionCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/TransactionCommandsTest.java @@ -4,6 +4,7 @@ import java.io.IOException; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.List; import java.util.Set; @@ -12,11 +13,12 @@ import org.junit.Test; import redis.clients.jedis.Jedis; import redis.clients.jedis.Pipeline; +import redis.clients.jedis.Protocol.Keyword; import redis.clients.jedis.Response; import redis.clients.jedis.Transaction; import redis.clients.jedis.TransactionBlock; -import redis.clients.jedis.Protocol.Keyword; import redis.clients.jedis.exceptions.JedisDataException; +import redis.clients.jedis.exceptions.JedisException; public class TransactionCommandsTest extends JedisCommandTestBase { final byte[] bfoo = { 0x01, 0x02, 0x03, 0x04 }; @@ -30,269 +32,359 @@ public class TransactionCommandsTest extends JedisCommandTestBase { @Before public void setUp() throws Exception { - super.setUp(); + super.setUp(); - nj = new Jedis(hnp.host, hnp.port, 500); - nj.connect(); - nj.auth("foobared"); - nj.flushAll(); + nj = new Jedis(hnp.getHost(), hnp.getPort(), 500); + nj.connect(); + nj.auth("foobared"); + nj.flushAll(); } @Test public void multi() { - Transaction trans = jedis.multi(); + Transaction trans = jedis.multi(); - trans.sadd("foo", "a"); - trans.sadd("foo", "b"); - trans.scard("foo"); + trans.sadd("foo", "a"); + trans.sadd("foo", "b"); + trans.scard("foo"); - List response = trans.exec(); + List response = trans.exec(); - List expected = new ArrayList(); - expected.add(1L); - expected.add(1L); - expected.add(2L); - assertEquals(expected, response); + List expected = new ArrayList(); + expected.add(1L); + expected.add(1L); + expected.add(2L); + assertEquals(expected, response); - // Binary - trans = jedis.multi(); + // Binary + trans = jedis.multi(); - trans.sadd(bfoo, ba); - trans.sadd(bfoo, bb); - trans.scard(bfoo); + trans.sadd(bfoo, ba); + trans.sadd(bfoo, bb); + trans.scard(bfoo); - response = trans.exec(); + response = trans.exec(); - expected = new ArrayList(); - expected.add(1L); - expected.add(1L); - expected.add(2L); - assertEquals(expected, response); + expected = new ArrayList(); + expected.add(1L); + expected.add(1L); + expected.add(2L); + assertEquals(expected, response); } @Test public void multiBlock() { - List response = jedis.multi(new TransactionBlock() { - @Override - public void execute() { - sadd("foo", "a"); - sadd("foo", "b"); - scard("foo"); - } - }); + List response = jedis.multi(new TransactionBlock() { + @Override + public void execute() { + sadd("foo", "a"); + sadd("foo", "b"); + scard("foo"); + } + }); - List expected = new ArrayList(); - expected.add(1L); - expected.add(1L); - expected.add(2L); - assertEquals(expected, response); + List expected = new ArrayList(); + expected.add(1L); + expected.add(1L); + expected.add(2L); + assertEquals(expected, response); - // Binary - response = jedis.multi(new TransactionBlock() { - @Override - public void execute() { - sadd(bfoo, ba); - sadd(bfoo, bb); - scard(bfoo); - } - }); + // Binary + response = jedis.multi(new TransactionBlock() { + @Override + public void execute() { + sadd(bfoo, ba); + sadd(bfoo, bb); + scard(bfoo); + } + }); - expected = new ArrayList(); - expected.add(1L); - expected.add(1L); - expected.add(2L); - assertEquals(expected, response); + expected = new ArrayList(); + expected.add(1L); + expected.add(1L); + expected.add(2L); + assertEquals(expected, response); } + @Test + public void multiBlockWithErrorRedisDiscardsTransaction() throws Exception { + // Transaction with error - Redis discards transaction automatically + // (Syntax Error, etc.) + TransactionBlock tb = new TransactionBlock() { + + @Override + public void execute() throws JedisException { + del("hello"); + hmset("hello", new HashMap()); + } + }; + + try { + jedis.multi(tb); + } catch (JedisDataException e) { + assertTrue(e.getMessage().contains("EXECABORT")); + } catch (Exception e) { + throw e; + } + } + + @Test + public void multiBlockWithErrorRedisForceToExecuteAllCommands() + throws Exception { + // Transaction with error - Redis doesn't roll back (Type Error, + // Deletion of non-exist key, etc.) + jedis.del("hello2"); + TransactionBlock tb2 = new TransactionBlock() { + + @Override + public void execute() throws JedisException { + del("hello2"); + set("hello2", "hello"); + sadd("hello2", "hello2"); + } + }; + + List responses = jedis.multi(tb2); + assertEquals("OK", responses.get(1)); + assertEquals(JedisDataException.class, responses.get(2).getClass()); + + Exception exc = (JedisDataException) responses.get(2); + assertTrue(exc.getMessage().contains("WRONGTYPE")); + } + @Test public void watch() throws UnknownHostException, IOException { - jedis.watch("mykey", "somekey"); - Transaction t = jedis.multi(); + jedis.watch("mykey", "somekey"); + Transaction t = jedis.multi(); - nj.connect(); - nj.auth("foobared"); - nj.set("mykey", "bar"); - nj.disconnect(); + nj.connect(); + nj.auth("foobared"); + nj.set("mykey", "bar"); + nj.disconnect(); - t.set("mykey", "foo"); - List resp = t.exec(); - assertEquals(null, resp); - assertEquals("bar", jedis.get("mykey")); + t.set("mykey", "foo"); + List resp = t.exec(); + assertEquals(null, resp); + assertEquals("bar", jedis.get("mykey")); - // Binary - jedis.watch(bmykey, "foobar".getBytes()); - t = jedis.multi(); + // Binary + jedis.watch(bmykey, "foobar".getBytes()); + t = jedis.multi(); - nj.connect(); - nj.auth("foobared"); - nj.set(bmykey, bbar); - nj.disconnect(); + nj.connect(); + nj.auth("foobared"); + nj.set(bmykey, bbar); + nj.disconnect(); - t.set(bmykey, bfoo); - resp = t.exec(); - assertEquals(null, resp); - assertTrue(Arrays.equals(bbar, jedis.get(bmykey))); + t.set(bmykey, bfoo); + resp = t.exec(); + assertEquals(null, resp); + assertTrue(Arrays.equals(bbar, jedis.get(bmykey))); } @Test public void unwatch() throws UnknownHostException, IOException { - jedis.watch("mykey"); - String val = jedis.get("mykey"); - val = "foo"; - String status = jedis.unwatch(); - assertEquals("OK", status); - Transaction t = jedis.multi(); + jedis.watch("mykey"); + String val = jedis.get("mykey"); + val = "foo"; + String status = jedis.unwatch(); + assertEquals("OK", status); + Transaction t = jedis.multi(); - nj.connect(); - nj.auth("foobared"); - nj.set("mykey", "bar"); - nj.disconnect(); + nj.connect(); + nj.auth("foobared"); + nj.set("mykey", "bar"); + nj.disconnect(); - t.set("mykey", val); - List resp = t.exec(); - assertEquals(1, resp.size()); - assertEquals("OK", resp.get(0)); + t.set("mykey", val); + List resp = t.exec(); + assertEquals(1, resp.size()); + assertEquals("OK", resp.get(0)); - // Binary - jedis.watch(bmykey); - byte[] bval = jedis.get(bmykey); - bval = bfoo; - status = jedis.unwatch(); - assertEquals(Keyword.OK.name(), status); - t = jedis.multi(); + // Binary + jedis.watch(bmykey); + byte[] bval = jedis.get(bmykey); + bval = bfoo; + status = jedis.unwatch(); + assertEquals(Keyword.OK.name(), status); + t = jedis.multi(); - nj.connect(); - nj.auth("foobared"); - nj.set(bmykey, bbar); - nj.disconnect(); + nj.connect(); + nj.auth("foobared"); + nj.set(bmykey, bbar); + nj.disconnect(); - t.set(bmykey, bval); - resp = t.exec(); - assertEquals(1, resp.size()); - assertEquals("OK", resp.get(0)); + t.set(bmykey, bval); + resp = t.exec(); + assertEquals(1, resp.size()); + assertEquals("OK", resp.get(0)); } @Test(expected = JedisDataException.class) public void validateWhenInMulti() { - jedis.multi(); - jedis.ping(); + jedis.multi(); + jedis.ping(); } @Test public void discard() { - Transaction t = jedis.multi(); - String status = t.discard(); - assertEquals("OK", status); + Transaction t = jedis.multi(); + String status = t.discard(); + assertEquals("OK", status); } @Test public void transactionResponse() { - jedis.set("string", "foo"); - jedis.lpush("list", "foo"); - jedis.hset("hash", "foo", "bar"); - jedis.zadd("zset", 1, "foo"); - jedis.sadd("set", "foo"); + jedis.set("string", "foo"); + jedis.lpush("list", "foo"); + jedis.hset("hash", "foo", "bar"); + jedis.zadd("zset", 1, "foo"); + jedis.sadd("set", "foo"); - Transaction t = jedis.multi(); - Response string = t.get("string"); - Response list = t.lpop("list"); - Response hash = t.hget("hash", "foo"); - Response> zset = t.zrange("zset", 0, -1); - Response set = t.spop("set"); - t.exec(); + Transaction t = jedis.multi(); + Response string = t.get("string"); + Response list = t.lpop("list"); + Response hash = t.hget("hash", "foo"); + Response> zset = t.zrange("zset", 0, -1); + Response set = t.spop("set"); + t.exec(); - assertEquals("foo", string.get()); - assertEquals("foo", list.get()); - assertEquals("bar", hash.get()); - assertEquals("foo", zset.get().iterator().next()); - assertEquals("foo", set.get()); + assertEquals("foo", string.get()); + assertEquals("foo", list.get()); + assertEquals("bar", hash.get()); + assertEquals("foo", zset.get().iterator().next()); + assertEquals("foo", set.get()); } @Test public void transactionResponseBinary() { - jedis.set("string", "foo"); - jedis.lpush("list", "foo"); - jedis.hset("hash", "foo", "bar"); - jedis.zadd("zset", 1, "foo"); - jedis.sadd("set", "foo"); + jedis.set("string", "foo"); + jedis.lpush("list", "foo"); + jedis.hset("hash", "foo", "bar"); + jedis.zadd("zset", 1, "foo"); + jedis.sadd("set", "foo"); - Transaction t = jedis.multi(); - Response string = t.get("string".getBytes()); - Response list = t.lpop("list".getBytes()); - Response hash = t.hget("hash".getBytes(), "foo".getBytes()); - Response> zset = t.zrange("zset".getBytes(), 0, -1); - Response set = t.spop("set".getBytes()); - t.exec(); + Transaction t = jedis.multi(); + Response string = t.get("string".getBytes()); + Response list = t.lpop("list".getBytes()); + Response hash = t.hget("hash".getBytes(), "foo".getBytes()); + Response> zset = t.zrange("zset".getBytes(), 0, -1); + Response set = t.spop("set".getBytes()); + t.exec(); - assertArrayEquals("foo".getBytes(), string.get()); - assertArrayEquals("foo".getBytes(), list.get()); - assertArrayEquals("bar".getBytes(), hash.get()); - assertArrayEquals("foo".getBytes(), zset.get().iterator().next()); - assertArrayEquals("foo".getBytes(), set.get()); + assertArrayEquals("foo".getBytes(), string.get()); + assertArrayEquals("foo".getBytes(), list.get()); + assertArrayEquals("bar".getBytes(), hash.get()); + assertArrayEquals("foo".getBytes(), zset.get().iterator().next()); + assertArrayEquals("foo".getBytes(), set.get()); } @Test(expected = JedisDataException.class) public void transactionResponseWithinPipeline() { - jedis.set("string", "foo"); + jedis.set("string", "foo"); - Transaction t = jedis.multi(); - Response string = t.get("string"); - string.get(); - t.exec(); + Transaction t = jedis.multi(); + Response string = t.get("string"); + string.get(); + t.exec(); } - + @Test public void transactionResponseWithError() { - Transaction t = jedis.multi(); - t.set("foo", "bar"); - Response> error = t.smembers("foo"); - Response r = t.get("foo"); - List l = t.exec(); - assertEquals(JedisDataException.class, l.get(1).getClass()); - try{ - error.get(); - fail("We expect exception here!"); - }catch(JedisDataException e){ - //that is fine we should be here - } - assertEquals(r.get(), "bar"); + Transaction t = jedis.multi(); + t.set("foo", "bar"); + Response> error = t.smembers("foo"); + Response r = t.get("foo"); + List l = t.exec(); + assertEquals(JedisDataException.class, l.get(1).getClass()); + try { + error.get(); + fail("We expect exception here!"); + } catch (JedisDataException e) { + // that is fine we should be here + } + assertEquals(r.get(), "bar"); } - + @Test public void execGetResponse() { - Transaction t = jedis.multi(); + Transaction t = jedis.multi(); - t.set("foo", "bar"); - t.smembers("foo"); - t.get("foo"); + t.set("foo", "bar"); + t.smembers("foo"); + t.get("foo"); - List> lr = t.execGetResponse(); - try{ - lr.get(1).get(); - fail("We expect exception here!"); - }catch(JedisDataException e){ - //that is fine we should be here - } - assertEquals("bar", lr.get(2).get()); + List> lr = t.execGetResponse(); + try { + lr.get(1).get(); + fail("We expect exception here!"); + } catch (JedisDataException e) { + // that is fine we should be here + } + assertEquals("bar", lr.get(2).get()); } - + @Test public void select() { - jedis.select(1); - jedis.set("foo", "bar"); - jedis.watch("foo"); - Transaction t = jedis.multi(); - t.select(0); - t.set("bar", "foo"); - - Jedis jedis2 = createJedis(); - jedis2.select(1); - jedis2.set("foo", "bar2"); - - List results = t.exec(); - - assertNull(results); + jedis.select(1); + jedis.set("foo", "bar"); + jedis.watch("foo"); + Transaction t = jedis.multi(); + t.select(0); + t.set("bar", "foo"); + + Jedis jedis2 = createJedis(); + jedis2.select(1); + jedis2.set("foo", "bar2"); + + List results = t.exec(); + + assertNull(results); + } + + @Test + public void testResetStateWhenInMulti() { + jedis.auth("foobared"); + + Transaction t = jedis.multi(); + t.set("foooo", "barrr"); + + jedis.resetState(); + assertEquals(null, jedis.get("foooo")); + } + + @Test + public void testResetStateWhenInMultiWithinPipeline() { + jedis.auth("foobared"); + + Pipeline p = jedis.pipelined(); + p.multi(); + p.set("foooo", "barrr"); + + jedis.resetState(); + assertEquals(null, jedis.get("foooo")); + } + + @Test + public void testResetStateWhenInWatch() { + jedis.watch("mykey", "somekey"); + + // state reset : unwatch + jedis.resetState(); + + Transaction t = jedis.multi(); + + nj.connect(); + nj.auth("foobared"); + nj.set("mykey", "bar"); + nj.disconnect(); + + t.set("mykey", "foo"); + List resp = t.exec(); + assertNotNull(resp); + assertEquals(1, resp.size()); + assertEquals("foo", jedis.get("mykey")); } } \ No newline at end of file diff --git a/src/test/java/redis/clients/jedis/tests/commands/VariadicCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/VariadicCommandsTest.java index fd63859..43bb705 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/VariadicCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/VariadicCommandsTest.java @@ -10,181 +10,181 @@ import java.util.Set; import org.junit.Test; public class VariadicCommandsTest extends JedisCommandTestBase { - final byte[] bfoo = { 0x01, 0x02, 0x03, 0x04 }; + final byte[] bfoo = { 0x01, 0x02, 0x03, 0x04 }; final byte[] bbar = { 0x05, 0x06, 0x07, 0x08 }; final byte[] bcar = { 0x09, 0x0A, 0x0B, 0x0C }; final byte[] bfoo1 = { 0x01, 0x02, 0x03, 0x04, 0x0A }; final byte[] bfoo2 = { 0x01, 0x02, 0x03, 0x04, 0x0B }; - - @Test + + @Test public void hdel() { - Map hash = new HashMap(); - hash.put("bar", "car"); - hash.put("car", "bar"); - hash.put("foo2", "bar"); - jedis.hmset("foo", hash); + Map hash = new HashMap(); + hash.put("bar", "car"); + hash.put("car", "bar"); + hash.put("foo2", "bar"); + jedis.hmset("foo", hash); - assertEquals(0, jedis.hdel("bar", "foo", "foo1").intValue()); - assertEquals(0, jedis.hdel("foo", "foo", "foo1").intValue()); - assertEquals(2, jedis.hdel("foo", "bar", "foo2").intValue()); - assertEquals(null, jedis.hget("foo", "bar")); + assertEquals(0, jedis.hdel("bar", "foo", "foo1").intValue()); + assertEquals(0, jedis.hdel("foo", "foo", "foo1").intValue()); + assertEquals(2, jedis.hdel("foo", "bar", "foo2").intValue()); + assertEquals(null, jedis.hget("foo", "bar")); - // Binary - Map bhash = new HashMap(); - bhash.put(bbar, bcar); - bhash.put(bcar, bbar); - bhash.put(bfoo2, bbar); - jedis.hmset(bfoo, bhash); + // Binary + Map bhash = new HashMap(); + bhash.put(bbar, bcar); + bhash.put(bcar, bbar); + bhash.put(bfoo2, bbar); + jedis.hmset(bfoo, bhash); - assertEquals(0, jedis.hdel(bbar, bfoo, bfoo1).intValue()); - assertEquals(0, jedis.hdel(bfoo, bfoo, bfoo1).intValue()); - assertEquals(2, jedis.hdel(bfoo, bbar, bfoo2).intValue()); - assertEquals(null, jedis.hget(bfoo, bbar)); + assertEquals(0, jedis.hdel(bbar, bfoo, bfoo1).intValue()); + assertEquals(0, jedis.hdel(bfoo, bfoo, bfoo1).intValue()); + assertEquals(2, jedis.hdel(bfoo, bbar, bfoo2).intValue()); + assertEquals(null, jedis.hget(bfoo, bbar)); } - - @Test + + @Test public void rpush() { - long size = jedis.rpush("foo", "bar", "foo"); - assertEquals(2, size); - - List expected = new ArrayList(); - expected.add("bar"); - expected.add("foo"); - - List values = jedis.lrange("foo",0,-1); - assertEquals(expected, values); - - // Binary - size = jedis.rpush(bfoo, bbar, bfoo); - assertEquals(2, size); - - List bexpected = new ArrayList(); - bexpected.add(bbar); - bexpected.add(bfoo); + long size = jedis.rpush("foo", "bar", "foo"); + assertEquals(2, size); - List bvalues = jedis.lrange(bfoo, 0, -1); - assertEquals(bexpected, bvalues); + List expected = new ArrayList(); + expected.add("bar"); + expected.add("foo"); + + List values = jedis.lrange("foo", 0, -1); + assertEquals(expected, values); + + // Binary + size = jedis.rpush(bfoo, bbar, bfoo); + assertEquals(2, size); + + List bexpected = new ArrayList(); + bexpected.add(bbar); + bexpected.add(bfoo); + + List bvalues = jedis.lrange(bfoo, 0, -1); + assertEquals(bexpected, bvalues); } - - @Test + + @Test public void lpush() { - long size = jedis.lpush("foo", "bar", "foo"); - assertEquals(2, size); - - List expected = new ArrayList(); - expected.add("foo"); - expected.add("bar"); - - List values = jedis.lrange("foo",0,-1); - assertEquals(expected, values); - - // Binary - size = jedis.lpush(bfoo, bbar, bfoo); - assertEquals(2, size); - - List bexpected = new ArrayList(); - bexpected.add(bfoo); - bexpected.add(bbar); + long size = jedis.lpush("foo", "bar", "foo"); + assertEquals(2, size); + + List expected = new ArrayList(); + expected.add("foo"); + expected.add("bar"); + + List values = jedis.lrange("foo", 0, -1); + assertEquals(expected, values); + + // Binary + size = jedis.lpush(bfoo, bbar, bfoo); + assertEquals(2, size); + + List bexpected = new ArrayList(); + bexpected.add(bfoo); + bexpected.add(bbar); + + List bvalues = jedis.lrange(bfoo, 0, -1); + assertEquals(bexpected, bvalues); - List bvalues = jedis.lrange(bfoo, 0, -1); - assertEquals(bexpected, bvalues); - } - - @Test + + @Test public void sadd() { - long status = jedis.sadd("foo", "bar", "foo1"); - assertEquals(2, status); + long status = jedis.sadd("foo", "bar", "foo1"); + assertEquals(2, status); - status = jedis.sadd("foo", "bar", "car"); - assertEquals(1, status); + status = jedis.sadd("foo", "bar", "car"); + assertEquals(1, status); - status = jedis.sadd("foo", "bar", "foo1"); - assertEquals(0, status); + status = jedis.sadd("foo", "bar", "foo1"); + assertEquals(0, status); - status = jedis.sadd(bfoo, bbar, bfoo1); - assertEquals(2, status); + status = jedis.sadd(bfoo, bbar, bfoo1); + assertEquals(2, status); - status = jedis.sadd(bfoo, bbar, bcar); - assertEquals(1, status); + status = jedis.sadd(bfoo, bbar, bcar); + assertEquals(1, status); - status = jedis.sadd(bfoo, bbar, bfoo1); - assertEquals(0, status); + status = jedis.sadd(bfoo, bbar, bfoo1); + assertEquals(0, status); } - - @Test + + @Test public void zadd() { - Map scoreMembers = new HashMap(); - scoreMembers.put(1d, "bar"); - scoreMembers.put(10d, "foo"); - - long status = jedis.zadd("foo", scoreMembers); - assertEquals(2, status); + Map scoreMembers = new HashMap(); + scoreMembers.put("bar", 1d); + scoreMembers.put("foo", 10d); - scoreMembers.clear(); - scoreMembers.put(0.1d, "car"); - scoreMembers.put(2d, "bar"); - - status = jedis.zadd("foo", scoreMembers); - assertEquals(1, status); + long status = jedis.zadd("foo", scoreMembers); + assertEquals(2, status); - Map bscoreMembers = new HashMap(); - bscoreMembers.put(1d, bbar); - bscoreMembers.put(10d, bfoo); - - status = jedis.zadd(bfoo, bscoreMembers); - assertEquals(2, status); + scoreMembers.clear(); + scoreMembers.put("car", 0.1d); + scoreMembers.put("bar", 2d); - bscoreMembers.clear(); - bscoreMembers.put(0.1d, bcar); - bscoreMembers.put(2d, bbar); - - status = jedis.zadd(bfoo, bscoreMembers); - assertEquals(1, status); + status = jedis.zadd("foo", scoreMembers); + assertEquals(1, status); + + Map bscoreMembers = new HashMap(); + bscoreMembers.put(bbar, 1d); + bscoreMembers.put(bfoo, 10d); + + status = jedis.zadd(bfoo, bscoreMembers); + assertEquals(2, status); + + bscoreMembers.clear(); + bscoreMembers.put(bcar, 0.1d); + bscoreMembers.put(bbar, 2d); + + status = jedis.zadd(bfoo, bscoreMembers); + assertEquals(1, status); } @Test public void zrem() { - jedis.zadd("foo", 1d, "bar"); - jedis.zadd("foo", 2d, "car"); - jedis.zadd("foo", 3d, "foo1"); + jedis.zadd("foo", 1d, "bar"); + jedis.zadd("foo", 2d, "car"); + jedis.zadd("foo", 3d, "foo1"); - long status = jedis.zrem("foo", "bar", "car"); + long status = jedis.zrem("foo", "bar", "car"); - Set expected = new LinkedHashSet(); - expected.add("foo1"); + Set expected = new LinkedHashSet(); + expected.add("foo1"); - assertEquals(2, status); - assertEquals(expected, jedis.zrange("foo", 0, 100)); + assertEquals(2, status); + assertEquals(expected, jedis.zrange("foo", 0, 100)); - status = jedis.zrem("foo", "bar", "car"); - assertEquals(0, status); - - status = jedis.zrem("foo", "bar", "foo1"); - assertEquals(1, status); + status = jedis.zrem("foo", "bar", "car"); + assertEquals(0, status); - //Binary - jedis.zadd(bfoo, 1d, bbar); - jedis.zadd(bfoo, 2d, bcar); - jedis.zadd(bfoo, 3d, bfoo1); + status = jedis.zrem("foo", "bar", "foo1"); + assertEquals(1, status); - status = jedis.zrem(bfoo, bbar, bcar); + // Binary + jedis.zadd(bfoo, 1d, bbar); + jedis.zadd(bfoo, 2d, bcar); + jedis.zadd(bfoo, 3d, bfoo1); - Set bexpected = new LinkedHashSet(); - bexpected.add(bfoo); + status = jedis.zrem(bfoo, bbar, bcar); - assertEquals(2, status); - assertEquals(bexpected, jedis.zrange(bfoo, 0, 100)); + Set bexpected = new LinkedHashSet(); + bexpected.add(bfoo); - status = jedis.zrem(bfoo, bbar, bcar); - assertEquals(0, status); - - status = jedis.zrem(bfoo, bbar, bfoo1); - assertEquals(1, status); + assertEquals(2, status); + assertEquals(bexpected, jedis.zrange(bfoo, 0, 100)); - } + status = jedis.zrem(bfoo, bbar, bcar); + assertEquals(0, status); + + status = jedis.zrem(bfoo, bbar, bfoo1); + assertEquals(1, status); + + } } \ No newline at end of file diff --git a/src/test/java/redis/clients/jedis/tests/utils/JedisSentinelTestUtil.java b/src/test/java/redis/clients/jedis/tests/utils/JedisSentinelTestUtil.java new file mode 100644 index 0000000..cd8fdc6 --- /dev/null +++ b/src/test/java/redis/clients/jedis/tests/utils/JedisSentinelTestUtil.java @@ -0,0 +1,128 @@ +package redis.clients.jedis.tests.utils; + +import java.util.List; +import java.util.Map; + +import redis.clients.jedis.HostAndPort; +import redis.clients.jedis.Jedis; + +public class JedisSentinelTestUtil { + + public static void waitForSentinelRecognizeRedisReplication( + HostAndPort sentinel, String masterName, HostAndPort master, + List slaves) throws InterruptedException { + Jedis sentinelJedis = new Jedis(sentinel.getHost(), sentinel.getPort()); + while (true) { + Thread.sleep(1000); + + if (!isMasterRecognized(sentinelJedis, masterName, master)) { + System.out.println("Master not recognized by Sentinel " + + sentinel.getHost() + ":" + sentinel.getPort() + + ", sleep..."); + continue; + } + + if (!isSlavesRecognized(sentinelJedis, masterName, slaves)) { + System.out.println("Slaves not recognized by Sentinel " + + sentinel.getHost() + ":" + sentinel.getPort() + + ", sleep..."); + continue; + } + + // all recognized + break; + } + + } + + public static HostAndPort waitForNewPromotedMaster(HostAndPort sentinel, + String masterName, HostAndPort oldMaster) + throws InterruptedException { + Jedis sentinelJedis = new Jedis(sentinel.getHost(), sentinel.getPort()); + + HostAndPort newMaster = null; + while (true) { + Thread.sleep(1000); + + List sentinelMasterInfos = sentinelJedis + .sentinelGetMasterAddrByName(masterName); + if (sentinelMasterInfos == null) + continue; + + newMaster = new HostAndPort(sentinelMasterInfos.get(0), + Integer.parseInt(sentinelMasterInfos.get(1))); + + if (!newMaster.equals(oldMaster)) + break; + + System.out + .println("Sentinel's master is not yet changed, sleep..."); + } + + return newMaster; + } + + public static void waitForSentinelsRecognizeEachOthers() + throws InterruptedException { + // During failover, master has been changed + // It means that sentinels need to recognize other sentinels from new + // master's hello channel + // Without recognizing, Sentinels cannot run failover + + // Sentinels need to take some time to recognize each other... + // http://redis.io/topics/sentinel + // Sentinel Rule #8: Every Sentinel publishes a message to every + // monitored master + // Pub/Sub channel __sentinel__:hello, every five seconds, blabla... + + // FIXME There're no command for sentinel to list recognized sentinels + // so sleep wisely (channel's hello message interval + margin) + Thread.sleep(5000 + 500); + } + + private static boolean isMasterRecognized(Jedis sentinelJedis, + String masterName, HostAndPort master) { + List sentinelMasterInfos = sentinelJedis + .sentinelGetMasterAddrByName(masterName); + if (sentinelMasterInfos == null) + return false; + + HostAndPort sentinelMaster = new HostAndPort( + sentinelMasterInfos.get(0), + Integer.parseInt(sentinelMasterInfos.get(1))); + + return sentinelMaster.equals(master); + } + + private static boolean isSlavesRecognized(Jedis sentinelJedis, + String masterName, List slaves) { + List> slavesMap = sentinelJedis + .sentinelSlaves(masterName); + + if (slavesMap.size() != slaves.size()) + return false; + + int slavesRecognized = 0; + + for (HostAndPort slave : slaves) { + if (isSlaveFoundInSlavesMap(slavesMap, slave)) + slavesRecognized++; + } + + return slavesRecognized == slaves.size(); + } + + private static boolean isSlaveFoundInSlavesMap( + List> slavesMap, HostAndPort slave) { + for (Map slaveMap : slavesMap) { + HostAndPort sentinelSlave = new HostAndPort(slaveMap.get("ip"), + Integer.parseInt(slaveMap.get("port"))); + + if (sentinelSlave.equals(slave)) + return true; + } + + return false; + } + +}