Skip to content

Commit f79d43e

Browse files
Add SET options EXAT, PXAT
Original Pull Request: #2086
1 parent 9e86bc1 commit f79d43e

File tree

4 files changed

+50
-10
lines changed

4 files changed

+50
-10
lines changed

src/main/java/org/springframework/data/redis/connection/jedis/JedisConverters.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -431,15 +431,15 @@ public static SetParams toSetCommandExPxArgument(Expiration expiration, SetParam
431431
return paramsToUse.keepttl();
432432
}
433433

434-
if (!expiration.isPersistent()) {
435-
if (expiration.getTimeUnit() == TimeUnit.MILLISECONDS) {
436-
return paramsToUse.px(expiration.getExpirationTime());
437-
}
434+
if (expiration.isPersistent()) {
435+
return paramsToUse;
436+
}
438437

439-
return paramsToUse.ex((int) expiration.getExpirationTime());
438+
if (expiration.getTimeUnit() == TimeUnit.MILLISECONDS) {
439+
return expiration.isUnixTimestamp() ? paramsToUse.pxAt(expiration.getExpirationTime()) : paramsToUse.px(expiration.getExpirationTime());
440440
}
441441

442-
return params;
442+
return expiration.isUnixTimestamp() ? paramsToUse.exAt(expiration.getConverted(TimeUnit.SECONDS)) : paramsToUse.ex(expiration.getConverted(TimeUnit.SECONDS));
443443
}
444444

445445
/**

src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConverters.java

+12-4
Original file line numberDiff line numberDiff line change
@@ -699,11 +699,19 @@ public static SetArgs toSetArgs(@Nullable Expiration expiration, @Nullable SetOp
699699
} else if (!expiration.isPersistent()) {
700700

701701
switch (expiration.getTimeUnit()) {
702-
case SECONDS:
703-
args.ex(expiration.getExpirationTime());
702+
case MILLISECONDS:
703+
if (expiration.isUnixTimestamp()) {
704+
args.pxAt(expiration.getConverted(TimeUnit.MILLISECONDS));
705+
} else {
706+
args.px(expiration.getConverted(TimeUnit.MILLISECONDS));
707+
}
704708
break;
705709
default:
706-
args.px(expiration.getConverted(TimeUnit.MILLISECONDS));
710+
if (expiration.isUnixTimestamp()) {
711+
args.exAt(expiration.getConverted(TimeUnit.SECONDS));
712+
} else {
713+
args.ex(expiration.getConverted(TimeUnit.SECONDS));
714+
}
707715
break;
708716
}
709717
}
@@ -740,7 +748,7 @@ static GetExArgs toGetExArgs(@Nullable Expiration expiration) {
740748
return args;
741749
}
742750

743-
if(expiration.isPersistent()) {
751+
if (expiration.isPersistent()) {
744752
return args.persist();
745753
}
746754

src/test/java/org/springframework/data/redis/connection/jedis/JedisConvertersUnitTests.java

+16
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,22 @@ void toSetCommandExPxOptionShouldReturnEXforMilliseconds() {
213213
assertThat(toString(JedisConverters.toSetCommandExPxArgument(Expiration.milliseconds(100)))).isEqualTo("px 100");
214214
}
215215

216+
@Test // GH-2050
217+
void convertsExpirationToSetPXAT() {
218+
219+
assertThat(JedisConverters.toSetCommandExPxArgument(Expiration.unixTimestamp(10, TimeUnit.MILLISECONDS)))
220+
.extracting(SetParams::toString)
221+
.isEqualTo(SetParams.setParams().pxAt(10).toString());
222+
}
223+
224+
@Test // GH-2050
225+
void convertsExpirationToSetEXAT() {
226+
227+
assertThat(JedisConverters.toSetCommandExPxArgument(Expiration.unixTimestamp(1, TimeUnit.MINUTES)))
228+
.extracting(SetParams::toString)
229+
.isEqualTo(SetParams.setParams().exAt(60).toString());
230+
}
231+
216232
@Test // DATAREDIS-316, DATAREDIS-749
217233
void toSetCommandNxXxOptionShouldReturnNXforAbsent() {
218234
assertThat(toString(JedisConverters.toSetCommandNxXxArgument(SetOption.ifAbsent()))).isEqualTo("nx");

src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConvertersUnitTests.java

+16
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,10 @@
3939
import org.springframework.data.redis.connection.RedisClusterNode.LinkState;
4040
import org.springframework.data.redis.connection.RedisStringCommands.SetOption;
4141
import org.springframework.data.redis.connection.RedisZSetCommands;
42+
import org.springframework.data.redis.connection.jedis.JedisConverters;
4243
import org.springframework.data.redis.core.types.Expiration;
4344
import org.springframework.data.redis.core.types.RedisClientInfo;
45+
import redis.clients.jedis.params.SetParams;
4446

4547
/**
4648
* @author Christoph Strobl
@@ -136,6 +138,20 @@ void toSetArgsShouldSetExForSeconds() {
136138
assertThat((Boolean) getField(args, "xx")).isEqualTo(Boolean.FALSE);
137139
}
138140

141+
@Test // GH-2050
142+
void convertsExpirationToSetPXAT() {
143+
144+
assertThatCommandArgument(LettuceConverters.toSetArgs(Expiration.unixTimestamp(10, TimeUnit.MILLISECONDS), null))
145+
.isEqualTo(SetArgs.Builder.pxAt(10));
146+
}
147+
148+
@Test // GH-2050
149+
void convertsExpirationToSetEXAT() {
150+
151+
assertThatCommandArgument(LettuceConverters.toSetArgs(Expiration.unixTimestamp(1, TimeUnit.MINUTES), null))
152+
.isEqualTo(SetArgs.Builder.exAt(60));
153+
}
154+
139155
@Test // DATAREDIS-316
140156
void toSetArgsShouldSetPxForMilliseconds() {
141157

0 commit comments

Comments
 (0)