From cd05e5c0b9e590668ea3e1fa89afa8c4337ea9d4 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Thu, 7 Feb 2019 14:56:36 +0100 Subject: [PATCH] DATAREDIS-848 - Use Lettuce's RestoreArgs to restore a key with replace option. We now use RestoreArgs instead of constructing a custom command. Original Pull Request: #382 --- .../lettuce/LettuceKeyCommands.java | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceKeyCommands.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceKeyCommands.java index e0be010ba..42c515c95 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceKeyCommands.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceKeyCommands.java @@ -16,15 +16,13 @@ package org.springframework.data.redis.connection.lettuce; import io.lettuce.core.KeyScanCursor; +import io.lettuce.core.RestoreArgs; +import io.lettuce.core.RestoreArgs.Builder; import io.lettuce.core.ScanArgs; import io.lettuce.core.ScanCursor; import io.lettuce.core.SortArgs; import io.lettuce.core.cluster.api.async.RedisClusterAsyncCommands; import io.lettuce.core.cluster.api.sync.RedisClusterCommands; -import io.lettuce.core.codec.ByteArrayCodec; -import io.lettuce.core.output.StatusOutput; -import io.lettuce.core.protocol.CommandArgs; -import io.lettuce.core.protocol.CommandType; import lombok.NonNull; import lombok.RequiredArgsConstructor; @@ -685,24 +683,23 @@ class LettuceKeyCommands implements RedisKeyCommands { try { - if (replace) { + RestoreArgs restoreArgs = Builder.ttl(ttlInMillis); - this.connection.execute("RESTORE", new byte[][] { key, LettuceConverters.toBytes(ttlInMillis), serializedValue, - LettuceConverters.toBytes("REPLACE") }); - return; + if (replace) { + restoreArgs = restoreArgs.replace(); } if (isPipelined()) { - pipeline(connection.newLettuceStatusResult(getAsyncConnection().restore(key, ttlInMillis, serializedValue))); + pipeline(connection.newLettuceStatusResult(getAsyncConnection().restore(key, serializedValue, restoreArgs))); return; } if (isQueueing()) { - transaction(connection.newLettuceStatusResult(getAsyncConnection().restore(key, ttlInMillis, serializedValue))); + transaction(connection.newLettuceStatusResult(getAsyncConnection().restore(key, serializedValue, restoreArgs))); return; } - getConnection().restore(key, ttlInMillis, serializedValue); + getConnection().restore(key, serializedValue, restoreArgs); } catch (Exception ex) { throw convertLettuceAccessException(ex); }