Skip to content

Commit b8d2892

Browse files
mp911dechristophstrobl
authored andcommitted
Add support for conditional key expiry (XX/NX/LT/GT).
Move ExpirationOptions from Hash to top-level. Closes: #3114 Original Pull Request: #3115
1 parent 08d66aa commit b8d2892

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+1192
-547
lines changed

src/main/java/org/springframework/data/redis/connection/DefaultStringRedisConnection.java

+29-30
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import org.springframework.data.geo.Metric;
3232
import org.springframework.data.geo.Point;
3333
import org.springframework.data.redis.RedisSystemException;
34-
import org.springframework.data.redis.connection.Hash.FieldExpirationOptions;
3534
import org.springframework.data.redis.connection.convert.Converters;
3635
import org.springframework.data.redis.connection.convert.ListConverter;
3736
import org.springframework.data.redis.connection.convert.MapConverter;
@@ -359,13 +358,13 @@ public Long exists(byte[]... keys) {
359358
}
360359

361360
@Override
362-
public Boolean expire(byte[] key, long seconds) {
363-
return convertAndReturn(delegate.expire(key, seconds), Converters.identityConverter());
361+
public Boolean expire(byte[] key, long seconds, ExpirationOptions.Condition condition) {
362+
return convertAndReturn(delegate.expire(key, seconds, condition), Converters.identityConverter());
364363
}
365364

366365
@Override
367-
public Boolean expireAt(byte[] key, long unixTime) {
368-
return convertAndReturn(delegate.expireAt(key, unixTime), Converters.identityConverter());
366+
public Boolean expireAt(byte[] key, long unixTime, ExpirationOptions.Condition condition) {
367+
return convertAndReturn(delegate.expireAt(key, unixTime, condition), Converters.identityConverter());
369368
}
370369

371370
@Override
@@ -1308,13 +1307,13 @@ public Long zLexCount(String key, org.springframework.data.domain.Range<String>
13081307
}
13091308

13101309
@Override
1311-
public Boolean pExpire(byte[] key, long millis) {
1312-
return convertAndReturn(delegate.pExpire(key, millis), Converters.identityConverter());
1310+
public Boolean pExpire(byte[] key, long millis, ExpirationOptions.Condition condition) {
1311+
return convertAndReturn(delegate.pExpire(key, millis, condition), Converters.identityConverter());
13131312
}
13141313

13151314
@Override
1316-
public Boolean pExpireAt(byte[] key, long unixTimeInMillis) {
1317-
return convertAndReturn(delegate.pExpireAt(key, unixTimeInMillis), Converters.identityConverter());
1315+
public Boolean pExpireAt(byte[] key, long unixTimeInMillis, ExpirationOptions.Condition condition) {
1316+
return convertAndReturn(delegate.pExpireAt(key, unixTimeInMillis, condition), Converters.identityConverter());
13181317
}
13191318

13201319
@Override
@@ -1497,13 +1496,13 @@ public Boolean exists(String key) {
14971496
}
14981497

14991498
@Override
1500-
public Boolean expire(String key, long seconds) {
1501-
return expire(serialize(key), seconds);
1499+
public Boolean expire(String key, long seconds, ExpirationOptions.Condition condition) {
1500+
return expire(serialize(key), seconds, condition);
15021501
}
15031502

15041503
@Override
1505-
public Boolean expireAt(String key, long unixTime) {
1506-
return expireAt(serialize(key), unixTime);
1504+
public Boolean expireAt(String key, long unixTime, ExpirationOptions.Condition condition) {
1505+
return expireAt(serialize(key), unixTime, condition);
15071506
}
15081507

15091508
@Override
@@ -2491,13 +2490,13 @@ public Object execute(String command, String... args) {
24912490
}
24922491

24932492
@Override
2494-
public Boolean pExpire(String key, long millis) {
2495-
return pExpire(serialize(key), millis);
2493+
public Boolean pExpire(String key, long millis, ExpirationOptions.Condition condition) {
2494+
return pExpire(serialize(key), millis, condition);
24962495
}
24972496

24982497
@Override
2499-
public Boolean pExpireAt(String key, long unixTimeInMillis) {
2500-
return pExpireAt(serialize(key), unixTimeInMillis);
2498+
public Boolean pExpireAt(String key, long unixTimeInMillis, ExpirationOptions.Condition condition) {
2499+
return pExpireAt(serialize(key), unixTimeInMillis, condition);
25012500
}
25022501

25032502
@Override
@@ -2581,29 +2580,29 @@ public Long hStrLen(byte[] key, byte[] field) {
25812580
return convertAndReturn(delegate.hStrLen(key, field), Converters.identityConverter());
25822581
}
25832582

2584-
public @Nullable List<Long> applyExpiration(byte[] key,
2583+
public @Nullable List<Long> applyHashFieldExpiration(byte[] key,
25852584
org.springframework.data.redis.core.types.Expiration expiration,
2586-
FieldExpirationOptions options, byte[]... fields) {
2587-
return this.delegate.applyExpiration(key, expiration, options, fields);
2585+
ExpirationOptions options, byte[]... fields) {
2586+
return this.delegate.applyHashFieldExpiration(key, expiration, options, fields);
25882587
}
25892588

25902589
@Override
2591-
public List<Long> hExpire(byte[] key, long seconds, FieldExpirationOptions.Condition condition, byte[]... fields) {
2590+
public List<Long> hExpire(byte[] key, long seconds, ExpirationOptions.Condition condition, byte[]... fields) {
25922591
return this.delegate.hExpire(key, seconds, condition, fields);
25932592
}
25942593

25952594
@Override
2596-
public List<Long> hpExpire(byte[] key, long millis, FieldExpirationOptions.Condition condition, byte[]... fields) {
2595+
public List<Long> hpExpire(byte[] key, long millis, ExpirationOptions.Condition condition, byte[]... fields) {
25972596
return this.delegate.hpExpire(key, millis, condition, fields);
25982597
}
25992598

26002599
@Override
2601-
public List<Long> hExpireAt(byte[] key, long unixTime, FieldExpirationOptions.Condition condition, byte[]... fields) {
2600+
public List<Long> hExpireAt(byte[] key, long unixTime, ExpirationOptions.Condition condition, byte[]... fields) {
26022601
return this.delegate.hExpireAt(key, unixTime, condition, fields);
26032602
}
26042603

26052604
@Override
2606-
public List<Long> hpExpireAt(byte[] key, long unixTimeInMillis, FieldExpirationOptions.Condition condition,
2605+
public List<Long> hpExpireAt(byte[] key, long unixTimeInMillis, ExpirationOptions.Condition condition,
26072606
byte[]... fields) {
26082607
return this.delegate.hpExpireAt(key, unixTimeInMillis, condition, fields);
26092608
}
@@ -2630,27 +2629,27 @@ public List<Long> hTtl(byte[] key, TimeUnit timeUnit, byte[]... fields) {
26302629

26312630
public @Nullable List<Long> applyExpiration(String key,
26322631
org.springframework.data.redis.core.types.Expiration expiration,
2633-
FieldExpirationOptions options, String... fields) {
2634-
return applyExpiration(serialize(key), expiration, options, serializeMulti(fields));
2632+
ExpirationOptions options, String... fields) {
2633+
return this.applyHashFieldExpiration(serialize(key), expiration, options, serializeMulti(fields));
26352634
}
26362635

26372636
@Override
2638-
public List<Long> hExpire(String key, long seconds, FieldExpirationOptions.Condition condition, String... fields) {
2637+
public List<Long> hExpire(String key, long seconds, ExpirationOptions.Condition condition, String... fields) {
26392638
return hExpire(serialize(key), seconds, condition, serializeMulti(fields));
26402639
}
26412640

26422641
@Override
2643-
public List<Long> hpExpire(String key, long millis, FieldExpirationOptions.Condition condition, String... fields) {
2642+
public List<Long> hpExpire(String key, long millis, ExpirationOptions.Condition condition, String... fields) {
26442643
return hpExpire(serialize(key), millis, condition, serializeMulti(fields));
26452644
}
26462645

26472646
@Override
2648-
public List<Long> hExpireAt(String key, long unixTime, FieldExpirationOptions.Condition condition, String... fields) {
2647+
public List<Long> hExpireAt(String key, long unixTime, ExpirationOptions.Condition condition, String... fields) {
26492648
return hExpireAt(serialize(key), unixTime, condition, serializeMulti(fields));
26502649
}
26512650

26522651
@Override
2653-
public List<Long> hpExpireAt(String key, long unixTimeInMillis, FieldExpirationOptions.Condition condition,
2652+
public List<Long> hpExpireAt(String key, long unixTimeInMillis, ExpirationOptions.Condition condition,
26542653
String... fields) {
26552654
return hpExpireAt(serialize(key), unixTimeInMillis, condition, serializeMulti(fields));
26562655
}

src/main/java/org/springframework/data/redis/connection/DefaultedRedisConnection.java

+43-16
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import org.springframework.data.geo.GeoResults;
2929
import org.springframework.data.geo.Metric;
3030
import org.springframework.data.geo.Point;
31-
import org.springframework.data.redis.connection.Hash.FieldExpirationOptions;
3231
import org.springframework.data.redis.connection.stream.ByteRecord;
3332
import org.springframework.data.redis.connection.stream.Consumer;
3433
import org.springframework.data.redis.connection.stream.MapRecord;
@@ -162,7 +161,14 @@ default Boolean renameNX(byte[] sourceKey, byte[] targetKey) {
162161
@Override
163162
@Deprecated
164163
default Boolean expire(byte[] key, long seconds) {
165-
return keyCommands().expire(key, seconds);
164+
return keyCommands().expire(key, seconds, ExpirationOptions.Condition.ALWAYS);
165+
}
166+
167+
/** @deprecated in favor of {@link RedisConnection#keyCommands()}. */
168+
@Override
169+
@Deprecated
170+
default Boolean expire(byte[] key, long seconds, ExpirationOptions.Condition condition) {
171+
return keyCommands().expire(key, seconds, condition);
166172
}
167173

168174
/** @deprecated in favor of {@link RedisConnection#keyCommands()}. */
@@ -204,21 +210,42 @@ default Long pTtl(byte[] key, TimeUnit timeUnit) {
204210
@Override
205211
@Deprecated
206212
default Boolean pExpire(byte[] key, long millis) {
207-
return keyCommands().pExpire(key, millis);
213+
return keyCommands().pExpire(key, millis, ExpirationOptions.Condition.ALWAYS);
214+
}
215+
216+
/** @deprecated in favor of {@link RedisConnection#keyCommands()}. */
217+
@Override
218+
@Deprecated
219+
default Boolean pExpire(byte[] key, long millis, ExpirationOptions.Condition condition) {
220+
return keyCommands().pExpire(key, millis, condition);
208221
}
209222

210223
/** @deprecated in favor of {@link RedisConnection#keyCommands()}. */
211224
@Override
212225
@Deprecated
213226
default Boolean pExpireAt(byte[] key, long unixTimeInMillis) {
214-
return keyCommands().pExpireAt(key, unixTimeInMillis);
227+
return keyCommands().pExpireAt(key, unixTimeInMillis, ExpirationOptions.Condition.ALWAYS);
228+
}
229+
230+
/** @deprecated in favor of {@link RedisConnection#keyCommands()}. */
231+
@Override
232+
@Deprecated
233+
default Boolean pExpireAt(byte[] key, long unixTimeInMillis, ExpirationOptions.Condition condition) {
234+
return keyCommands().pExpireAt(key, unixTimeInMillis, condition);
215235
}
216236

217237
/** @deprecated in favor of {@link RedisConnection#keyCommands()}. */
218238
@Override
219239
@Deprecated
220240
default Boolean expireAt(byte[] key, long unixTime) {
221-
return keyCommands().expireAt(key, unixTime);
241+
return keyCommands().expireAt(key, unixTime, ExpirationOptions.Condition.ALWAYS);
242+
}
243+
244+
/** @deprecated in favor of {@link RedisConnection#keyCommands()}. */
245+
@Override
246+
@Deprecated
247+
default Boolean expireAt(byte[] key, long unixTime, ExpirationOptions.Condition condition) {
248+
return keyCommands().expireAt(key, unixTime, condition);
222249
}
223250

224251
/** @deprecated in favor of {@link RedisConnection#keyCommands()}. */
@@ -1483,41 +1510,41 @@ default Long hStrLen(byte[] key, byte[] field) {
14831510
@Override
14841511
@Deprecated
14851512
default List<Long> hExpire(byte[] key, long seconds, byte[]... fields) {
1486-
return hashCommands().hExpire(key, seconds, FieldExpirationOptions.Condition.ALWAYS, fields);
1513+
return hashCommands().hExpire(key, seconds, ExpirationOptions.Condition.ALWAYS, fields);
14871514
}
14881515

14891516
/** @deprecated in favor of {@link RedisConnection#hashCommands()}}. */
14901517
@Override
14911518
@Deprecated
1492-
default List<Long> hExpire(byte[] key, long seconds, FieldExpirationOptions.Condition condition, byte[]... fields) {
1519+
default List<Long> hExpire(byte[] key, long seconds, ExpirationOptions.Condition condition, byte[]... fields) {
14931520
return hashCommands().hExpire(key, seconds, condition, fields);
14941521
}
14951522

14961523
/** @deprecated in favor of {@link RedisConnection#hashCommands()}}. */
14971524
@Override
14981525
@Deprecated
14991526
default List<Long> hpExpire(byte[] key, long millis, byte[]... fields) {
1500-
return hashCommands().hpExpire(key, millis, FieldExpirationOptions.Condition.ALWAYS, fields);
1527+
return hashCommands().hpExpire(key, millis, ExpirationOptions.Condition.ALWAYS, fields);
15011528
}
15021529

15031530
/** @deprecated in favor of {@link RedisConnection#hashCommands()}}. */
15041531
@Override
15051532
@Deprecated
1506-
default List<Long> hpExpire(byte[] key, long millis, FieldExpirationOptions.Condition condition, byte[]... fields) {
1533+
default List<Long> hpExpire(byte[] key, long millis, ExpirationOptions.Condition condition, byte[]... fields) {
15071534
return hashCommands().hpExpire(key, millis, condition, fields);
15081535
}
15091536

15101537
/** @deprecated in favor of {@link RedisConnection#hashCommands()}}. */
15111538
@Override
15121539
@Deprecated
15131540
default List<Long> hExpireAt(byte[] key, long unixTime, byte[]... fields) {
1514-
return hashCommands().hExpireAt(key, unixTime, FieldExpirationOptions.Condition.ALWAYS, fields);
1541+
return hashCommands().hExpireAt(key, unixTime, ExpirationOptions.Condition.ALWAYS, fields);
15151542
}
15161543

15171544
/** @deprecated in favor of {@link RedisConnection#hashCommands()}}. */
15181545
@Override
15191546
@Deprecated
1520-
default List<Long> hExpireAt(byte[] key, long unixTime, FieldExpirationOptions.Condition condition,
1547+
default List<Long> hExpireAt(byte[] key, long unixTime, ExpirationOptions.Condition condition,
15211548
byte[]... fields) {
15221549
return hashCommands().hExpireAt(key, unixTime, condition, fields);
15231550
}
@@ -1526,13 +1553,13 @@ default List<Long> hExpireAt(byte[] key, long unixTime, FieldExpirationOptions.C
15261553
@Override
15271554
@Deprecated
15281555
default List<Long> hpExpireAt(byte[] key, long unixTimeInMillis, byte[]... fields) {
1529-
return hashCommands().hpExpireAt(key, unixTimeInMillis, FieldExpirationOptions.Condition.ALWAYS, fields);
1556+
return hashCommands().hpExpireAt(key, unixTimeInMillis, ExpirationOptions.Condition.ALWAYS, fields);
15301557
}
15311558

15321559
/** @deprecated in favor of {@link RedisConnection#hashCommands()}}. */
15331560
@Override
15341561
@Deprecated
1535-
default List<Long> hpExpireAt(byte[] key, long unixTimeInMillis, FieldExpirationOptions.Condition condition,
1562+
default List<Long> hpExpireAt(byte[] key, long unixTimeInMillis, ExpirationOptions.Condition condition,
15361563
byte[]... fields) {
15371564
return hashCommands().hpExpireAt(key, unixTimeInMillis, condition, fields);
15381565
}
@@ -1568,10 +1595,10 @@ default List<Long> hpTtl(byte[] key, byte[]... fields) {
15681595
/** @deprecated in favor of {@link RedisConnection#hashCommands()}}. */
15691596
@Override
15701597
@Deprecated
1571-
default @Nullable List<Long> applyExpiration(byte[] key,
1572-
org.springframework.data.redis.core.types.Expiration expiration, FieldExpirationOptions options,
1598+
default @Nullable List<Long> applyHashFieldExpiration(byte[] key,
1599+
org.springframework.data.redis.core.types.Expiration expiration, ExpirationOptions options,
15731600
byte[]... fields) {
1574-
return hashCommands().applyExpiration(key, expiration, options, fields);
1601+
return hashCommands().applyHashFieldExpiration(key, expiration, options, fields);
15751602
}
15761603

15771604
// GEO COMMANDS

0 commit comments

Comments
 (0)