diff --git a/docs/src/reference/docbook/appendix/appendix-command-reference.xml b/docs/src/reference/docbook/appendix/appendix-command-reference.xml
index f00bd788e..224230164 100644
--- a/docs/src/reference/docbook/appendix/appendix-command-reference.xml
+++ b/docs/src/reference/docbook/appendix/appendix-command-reference.xml
@@ -26,7 +26,7 @@
CLIENT GETNAME-
CLIENT KILLX
CLIENT LIST-
- CLIENT SETNAME-
+ CLIENT SETNAMEX
CONFIG GETX
CONFIG RESETSTATX
CONFIG REWRITE-
diff --git a/src/main/java/org/springframework/data/redis/connection/DefaultStringRedisConnection.java b/src/main/java/org/springframework/data/redis/connection/DefaultStringRedisConnection.java
index b4f0addc2..beeac1aa9 100644
--- a/src/main/java/org/springframework/data/redis/connection/DefaultStringRedisConnection.java
+++ b/src/main/java/org/springframework/data/redis/connection/DefaultStringRedisConnection.java
@@ -2239,4 +2239,22 @@ public class DefaultStringRedisConnection implements StringRedisConnection {
return convertedResults;
}
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.data.redis.connection.RedisServerCommands#setClientName(java.lang.String)
+ */
+ @Override
+ public void setClientName(byte[] name) {
+ this.delegate.setClientName(name);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.data.redis.connection.StringRedisConnection#setClientName(java.lang.String)
+ */
+ @Override
+ public void setClientName(String name) {
+ setClientName(this.serializer.serialize(name));
+ }
+
}
diff --git a/src/main/java/org/springframework/data/redis/connection/RedisServerCommands.java b/src/main/java/org/springframework/data/redis/connection/RedisServerCommands.java
index 3e34dffba..3219df9f4 100644
--- a/src/main/java/org/springframework/data/redis/connection/RedisServerCommands.java
+++ b/src/main/java/org/springframework/data/redis/connection/RedisServerCommands.java
@@ -171,4 +171,10 @@ public interface RedisServerCommands {
*/
void killClient(String host, int port);
+ /**
+ * Assign given name to current connection.
+ *
+ * @since 1.3
+ */
+ void setClientName(byte[] name);
}
diff --git a/src/main/java/org/springframework/data/redis/connection/StringRedisConnection.java b/src/main/java/org/springframework/data/redis/connection/StringRedisConnection.java
index 20657682e..ae3d9684e 100644
--- a/src/main/java/org/springframework/data/redis/connection/StringRedisConnection.java
+++ b/src/main/java/org/springframework/data/redis/connection/StringRedisConnection.java
@@ -292,4 +292,13 @@ public interface StringRedisConnection extends RedisConnection {
T eval(String script, ReturnType returnType, int numKeys, String... keysAndArgs);
T evalSha(String scriptSha1, ReturnType returnType, int numKeys, String... keysAndArgs);
+
+ /**
+ * Assign given {@code name} to connection using registered {@link RedisSerializer} for name conversion.
+ *
+ * @param name
+ * @see #setClientName(byte[])
+ * @sice 1.3
+ */
+ void setClientName(String name);
}
diff --git a/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnection.java b/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnection.java
index 3af0cd6fa..56a4df482 100644
--- a/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnection.java
+++ b/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnection.java
@@ -2828,6 +2828,19 @@ public class JedisConnection implements RedisConnection {
}
}
+ /*
+ * @see org.springframework.data.redis.connection.RedisServerCommands#setClientName(java.lang.String)
+ */
+ @Override
+ public void setClientName(byte[] name) {
+
+ if (isPipelined() || isQueueing()) {
+ throw new UnsupportedOperationException("'CLIENT SETNAME' is not suppored in transacton / pipeline mode.");
+ }
+
+ jedis.clientSetname(name);
+ }
+
/**
* Specifies if pipelined results should be converted to the expected data type. If false, results of
* {@link #closePipeline()} and {@link #exec()} will be of the type returned by the Jedis driver
diff --git a/src/main/java/org/springframework/data/redis/connection/jredis/JredisConnection.java b/src/main/java/org/springframework/data/redis/connection/jredis/JredisConnection.java
index 26bfb5d8e..2e4656c33 100644
--- a/src/main/java/org/springframework/data/redis/connection/jredis/JredisConnection.java
+++ b/src/main/java/org/springframework/data/redis/connection/jredis/JredisConnection.java
@@ -1190,4 +1190,9 @@ public class JredisConnection implements RedisConnection {
public void killClient(String host, int port) {
throw new UnsupportedOperationException("The 'CLIENT KILL' command is not supported by the JRedis driver.");
}
+
+ @Override
+ public void setClientName(byte[] name) {
+ throw new UnsupportedOperationException("'CLIENT SETNAME' is not supported by the JRedis driver.");
+ }
}
diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnection.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnection.java
index 4b1ac6a65..96836323d 100644
--- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnection.java
+++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnection.java
@@ -2920,6 +2920,21 @@ public class LettuceConnection implements RedisConnection {
}
}
+ @Override
+ public void setClientName(byte[] name) {
+
+ if (isQueueing()) {
+ pipeline(new LettuceStatusResult(getAsyncConnection().clientSetname(name)));
+ return;
+ }
+ if (isQueueing()) {
+ transaction(new LettuceTxResult(getConnection().clientSetname(name)));
+ return;
+ }
+
+ getAsyncConnection().clientSetname(name);
+ }
+
/**
* Specifies if pipelined and transaction results should be converted to the expected data type. If false, results of
* {@link #closePipeline()} and {@link #exec()} will be of the type returned by the Lettuce driver
diff --git a/src/main/java/org/springframework/data/redis/connection/srp/SrpConnection.java b/src/main/java/org/springframework/data/redis/connection/srp/SrpConnection.java
index 2849bbf99..bda3701ee 100644
--- a/src/main/java/org/springframework/data/redis/connection/srp/SrpConnection.java
+++ b/src/main/java/org/springframework/data/redis/connection/srp/SrpConnection.java
@@ -2240,6 +2240,26 @@ public class SrpConnection implements RedisConnection {
}
}
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.data.redis.connection.RedisServerCommands#setClientName(byte[])
+ */
+ @Override
+ public void setClientName(byte[] name) {
+
+ try {
+
+ if (isPipelined()) {
+ pipeline(new SrpStatusResult(pipeline.client_setname(name)));
+ return;
+ }
+
+ this.client.client_setname(name);
+ } catch (Exception ex) {
+ throw convertSrpAccessException(ex);
+ }
+ }
+
private List