Skip to content

Commit d91cc50

Browse files
committed
Add imperative support for ZDIFF, ZDIFFSTORE, ZINTER, and ZUNION commands.
1 parent 57a2dbb commit d91cc50

18 files changed

+2709
-256
lines changed

src/main/asciidoc/new-features.adoc

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ This section briefly covers items that are new and noteworthy in the latest rele
77
== New in Spring Data Redis 2.6
88

99
* Support for `SubscriptionListener` when using `MessageListener` for subscription confirmation callbacks. `ReactiveRedisMessageListenerContainer` and `ReactiveRedisOperations` provide `receiveLater(…)` and `listenToLater(…)` methods to await until Redis acknowledges the subscription.
10-
* Support Redis 6.2 commands (`LPOP`/`RPOP` with `count`, `COPY`, `ZPOPMIN`, `BZPOPMIN`, `ZPOPMAX`, `BZPOPMAX`, `ZMSCORE`).
10+
* Support Redis 6.2 commands (`LPOP`/`RPOP` with `count`, `COPY`, `ZPOPMIN`, `BZPOPMIN`, `ZPOPMAX`, `BZPOPMAX`, `ZMSCORE`, `ZDIFF`, `ZDIFFSTORE`, `ZINTER`, `ZUNION`).
1111

1212
[[new-in-2.5.0]]
1313
== New in Spring Data Redis 2.5

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

+239-10
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
import org.apache.commons.logging.Log;
2525
import org.apache.commons.logging.LogFactory;
26+
2627
import org.springframework.core.convert.converter.Converter;
2728
import org.springframework.data.geo.Circle;
2829
import org.springframework.data.geo.Distance;
@@ -278,7 +279,6 @@ public Long decrBy(byte[] key, long value) {
278279
return convertAndReturn(delegate.decrBy(key, value), Converters.identityConverter());
279280
}
280281

281-
282282
/*
283283
* (non-Javadoc)
284284
* @see org.springframework.data.redis.connection.RedisKeyCommands#del(byte[][])
@@ -1413,6 +1413,147 @@ public Double zIncrBy(byte[] key, double increment, byte[] value) {
14131413
return convertAndReturn(delegate.zIncrBy(key, increment, value), Converters.identityConverter());
14141414
}
14151415

1416+
/*
1417+
* (non-Javadoc)
1418+
* @see org.springframework.data.redis.connection.RedisZSetCommands#zDiff(byte[][])
1419+
*/
1420+
@Nullable
1421+
@Override
1422+
public Set<byte[]> zDiff(byte[]... sets) {
1423+
return convertAndReturn(delegate.zDiff(sets), Converters.identityConverter());
1424+
}
1425+
1426+
/*
1427+
* (non-Javadoc)
1428+
* @see org.springframework.data.redis.connection.RedisZSetCommands#zDiffWithScores(byte[][])
1429+
*/
1430+
@Nullable
1431+
@Override
1432+
public Set<Tuple> zDiffWithScores(byte[]... sets) {
1433+
return convertAndReturn(delegate.zDiffWithScores(sets), Converters.identityConverter());
1434+
}
1435+
1436+
/*
1437+
* (non-Javadoc)
1438+
* @see org.springframework.data.redis.connection.RedisZSetCommands#zDiffStore(byte[], byte[][])
1439+
*/
1440+
@Nullable
1441+
@Override
1442+
public Long zDiffStore(byte[] destKey, byte[]... sets) {
1443+
return convertAndReturn(delegate.zDiffStore(destKey, sets), Converters.identityConverter());
1444+
}
1445+
1446+
/*
1447+
* (non-Javadoc)
1448+
* @see org.springframework.data.redis.connection.StringRedisConnection#zDiff(java.lang.String[])
1449+
*/
1450+
@Nullable
1451+
@Override
1452+
public Set<String> zDiff(String... sets) {
1453+
return convertAndReturn(delegate.zDiff(serializeMulti(sets)), byteSetToStringSet);
1454+
}
1455+
1456+
/*
1457+
* (non-Javadoc)
1458+
* @see org.springframework.data.redis.connection.StringRedisConnection#zDiffWithScores(java.lang.String[])
1459+
*/
1460+
@Nullable
1461+
@Override
1462+
public Set<StringTuple> zDiffWithScores(String... sets) {
1463+
return convertAndReturn(delegate.zDiffWithScores(serializeMulti(sets)), tupleToStringTuple);
1464+
}
1465+
1466+
/*
1467+
* (non-Javadoc)
1468+
* @see org.springframework.data.redis.connection.StringRedisConnection#zDiffStore(java.lang.String, java.lang.String[])
1469+
*/
1470+
@Nullable
1471+
@Override
1472+
public Long zDiffStore(String destKey, String... sets) {
1473+
return convertAndReturn(delegate.zDiffStore(serialize(destKey), serializeMulti(sets)),
1474+
Converters.identityConverter());
1475+
}
1476+
1477+
/*
1478+
* (non-Javadoc)
1479+
* @see org.springframework.data.redis.connection.RedisZSetCommands#zInter(byte[][])
1480+
*/
1481+
@Nullable
1482+
@Override
1483+
public Set<byte[]> zInter(byte[]... sets) {
1484+
return convertAndReturn(delegate.zInter(sets), Converters.identityConverter());
1485+
}
1486+
1487+
/*
1488+
* (non-Javadoc)
1489+
* @see org.springframework.data.redis.connection.RedisZSetCommands#zInter(org.springframework.data.redis.connection.RedisZSetCommands.Aggregate, org.springframework.data.redis.connection.RedisZSetCommands.Weights, byte[][])
1490+
*/
1491+
@Nullable
1492+
@Override
1493+
public Set<byte[]> zInter(Aggregate aggregate, Weights weights, byte[]... sets) {
1494+
return convertAndReturn(delegate.zInter(aggregate, weights, sets), Converters.identityConverter());
1495+
}
1496+
1497+
/*
1498+
* (non-Javadoc)
1499+
* @see org.springframework.data.redis.connection.RedisZSetCommands#zInterWithScores(byte[][])
1500+
*/
1501+
@Nullable
1502+
@Override
1503+
public Set<Tuple> zInterWithScores(byte[]... sets) {
1504+
return convertAndReturn(delegate.zInterWithScores(sets), Converters.identityConverter());
1505+
}
1506+
1507+
/*
1508+
* (non-Javadoc)
1509+
* @see org.springframework.data.redis.connection.RedisZSetCommands#zInterWithScores(org.springframework.data.redis.connection.RedisZSetCommands.Aggregate, org.springframework.data.redis.connection.RedisZSetCommands.Weights, byte[][])
1510+
*/
1511+
@Nullable
1512+
@Override
1513+
public Set<Tuple> zInterWithScores(Aggregate aggregate, Weights weights, byte[]... sets) {
1514+
return convertAndReturn(delegate.zInterWithScores(aggregate, weights, sets), Converters.identityConverter());
1515+
}
1516+
1517+
/*
1518+
* (non-Javadoc)
1519+
* @see org.springframework.data.redis.connection.StringRedisConnection#zInter(java.lang.String[])
1520+
*/
1521+
@Nullable
1522+
@Override
1523+
public Set<String> zInter(String... sets) {
1524+
return convertAndReturn(delegate.zInter(serializeMulti(sets)), byteSetToStringSet);
1525+
}
1526+
1527+
/*
1528+
* (non-Javadoc)
1529+
* @see org.springframework.data.redis.connection.StringRedisConnection#zInter(org.springframework.data.redis.connection.RedisZSetCommands.Aggregate, org.springframework.data.redis.connection.RedisZSetCommands.Weights, java.lang.String[])
1530+
*/
1531+
@Nullable
1532+
@Override
1533+
public Set<String> zInter(Aggregate aggregate, Weights weights, String... sets) {
1534+
return convertAndReturn(delegate.zInter(aggregate, weights, serializeMulti(sets)), byteSetToStringSet);
1535+
}
1536+
1537+
/*
1538+
* (non-Javadoc)
1539+
* @see org.springframework.data.redis.connection.StringRedisConnection#zInterWithScores(java.lang.String[])
1540+
*/
1541+
@Nullable
1542+
@Override
1543+
public Set<StringTuple> zInterWithScores(String... sets) {
1544+
return convertAndReturn(delegate.zInterWithScores(serializeMulti(sets)), tupleToStringTuple);
1545+
}
1546+
1547+
/*
1548+
* (non-Javadoc)
1549+
* @see org.springframework.data.redis.connection.StringRedisConnection#zInterWithScores(org.springframework.data.redis.connection.RedisZSetCommands.Aggregate, org.springframework.data.redis.connection.RedisZSetCommands.Weights, java.lang.String[])
1550+
*/
1551+
@Nullable
1552+
@Override
1553+
public Set<StringTuple> zInterWithScores(Aggregate aggregate, Weights weights, String... sets) {
1554+
return convertAndReturn(delegate.zInterWithScores(aggregate, weights, serializeMulti(sets)), tupleToStringTuple);
1555+
}
1556+
14161557
/*
14171558
* (non-Javadoc)
14181559
* @see org.springframework.data.redis.connection.RedisZSetCommands#zInterStore(byte[], org.springframework.data.redis.connection.RedisZSetCommands.Aggregate, org.springframework.data.redis.connection.RedisZSetCommands.Weights, byte[][])
@@ -1491,7 +1632,8 @@ public Set<byte[]> zRangeByScore(byte[] key, double min, double max) {
14911632
*/
14921633
@Override
14931634
public Set<Tuple> zRangeByScoreWithScores(byte[] key, double min, double max, long offset, long count) {
1494-
return convertAndReturn(delegate.zRangeByScoreWithScores(key, min, max, offset, count), Converters.identityConverter());
1635+
return convertAndReturn(delegate.zRangeByScoreWithScores(key, min, max, offset, count),
1636+
Converters.identityConverter());
14951637
}
14961638

14971639
/*
@@ -1563,7 +1705,8 @@ public Set<byte[]> zRevRangeByScore(byte[] key, Range range, Limit limit) {
15631705
*/
15641706
@Override
15651707
public Set<Tuple> zRevRangeByScoreWithScores(byte[] key, double min, double max, long offset, long count) {
1566-
return convertAndReturn(delegate.zRevRangeByScoreWithScores(key, min, max, offset, count), Converters.identityConverter());
1708+
return convertAndReturn(delegate.zRevRangeByScoreWithScores(key, min, max, offset, count),
1709+
Converters.identityConverter());
15671710
}
15681711

15691712
/*
@@ -1692,6 +1835,86 @@ public List<Double> zMScore(byte[] key, byte[]... values) {
16921835
return convertAndReturn(delegate.zMScore(key, values), Converters.identityConverter());
16931836
}
16941837

1838+
/*
1839+
* (non-Javadoc)
1840+
* @see org.springframework.data.redis.connection.RedisZSetCommands#zUnion(byte[][])
1841+
*/
1842+
@Nullable
1843+
@Override
1844+
public Set<byte[]> zUnion(byte[]... sets) {
1845+
return convertAndReturn(delegate.zUnion(sets), Converters.identityConverter());
1846+
}
1847+
1848+
/*
1849+
* (non-Javadoc)
1850+
* @see org.springframework.data.redis.connection.RedisZSetCommands#zUnion(org.springframework.data.redis.connection.RedisZSetCommands.Aggregate, org.springframework.data.redis.connection.RedisZSetCommands.Weights, byte[][])
1851+
*/
1852+
@Nullable
1853+
@Override
1854+
public Set<byte[]> zUnion(Aggregate aggregate, Weights weights, byte[]... sets) {
1855+
return convertAndReturn(delegate.zUnion(aggregate, weights, sets), Converters.identityConverter());
1856+
}
1857+
1858+
/*
1859+
* (non-Javadoc)
1860+
* @see org.springframework.data.redis.connection.RedisZSetCommands#zUnionWithScores(byte[][])
1861+
*/
1862+
@Nullable
1863+
@Override
1864+
public Set<Tuple> zUnionWithScores(byte[]... sets) {
1865+
return convertAndReturn(delegate.zUnionWithScores(sets), Converters.identityConverter());
1866+
}
1867+
1868+
/*
1869+
* (non-Javadoc)
1870+
* @see org.springframework.data.redis.connection.RedisZSetCommands#zUnionWithScores(org.springframework.data.redis.connection.RedisZSetCommands.Aggregate, org.springframework.data.redis.connection.RedisZSetCommands.Weights, byte[][])
1871+
*/
1872+
@Nullable
1873+
@Override
1874+
public Set<Tuple> zUnionWithScores(Aggregate aggregate, Weights weights, byte[]... sets) {
1875+
return convertAndReturn(delegate.zUnionWithScores(aggregate, weights, sets), Converters.identityConverter());
1876+
}
1877+
1878+
/*
1879+
* (non-Javadoc)
1880+
* @see org.springframework.data.redis.connection.StringRedisConnection#zUnion(java.lang.String[])
1881+
*/
1882+
@Nullable
1883+
@Override
1884+
public Set<String> zUnion(String... sets) {
1885+
return convertAndReturn(delegate.zUnion(serializeMulti(sets)), byteSetToStringSet);
1886+
}
1887+
1888+
/*
1889+
* (non-Javadoc)
1890+
* @see org.springframework.data.redis.connection.StringRedisConnection#zUnion(org.springframework.data.redis.connection.RedisZSetCommands.Aggregate, org.springframework.data.redis.connection.RedisZSetCommands.Weights, java.lang.String[])
1891+
*/
1892+
@Nullable
1893+
@Override
1894+
public Set<String> zUnion(Aggregate aggregate, Weights weights, String... sets) {
1895+
return convertAndReturn(delegate.zUnion(aggregate, weights, serializeMulti(sets)), byteSetToStringSet);
1896+
}
1897+
1898+
/*
1899+
* (non-Javadoc)
1900+
* @see org.springframework.data.redis.connection.StringRedisConnection#zUnionWithScores(java.lang.String[])
1901+
*/
1902+
@Nullable
1903+
@Override
1904+
public Set<StringTuple> zUnionWithScores(String... sets) {
1905+
return convertAndReturn(delegate.zUnionWithScores(serializeMulti(sets)), tupleToStringTuple);
1906+
}
1907+
1908+
/*
1909+
* (non-Javadoc)
1910+
* @see org.springframework.data.redis.connection.StringRedisConnection#zUnionWithScores(org.springframework.data.redis.connection.RedisZSetCommands.Aggregate, org.springframework.data.redis.connection.RedisZSetCommands.Weights, java.lang.String[])
1911+
*/
1912+
@Nullable
1913+
@Override
1914+
public Set<StringTuple> zUnionWithScores(Aggregate aggregate, Weights weights, String... sets) {
1915+
return convertAndReturn(delegate.zUnionWithScores(aggregate, weights, serializeMulti(sets)), tupleToStringTuple);
1916+
}
1917+
16951918
/*
16961919
* (non-Javadoc)
16971920
* @see org.springframework.data.redis.connection.RedisZSetCommands#zUnionStore(byte[], org.springframework.data.redis.connection.RedisZSetCommands.Aggregate, org.springframework.data.redis.connection.RedisZSetCommands.Weights, byte[][])
@@ -1823,7 +2046,8 @@ public <T> T eval(byte[] script, ReturnType returnType, int numKeys, byte[]... k
18232046
*/
18242047
@Override
18252048
public <T> T evalSha(String scriptSha1, ReturnType returnType, int numKeys, byte[]... keysAndArgs) {
1826-
return convertAndReturn(delegate.evalSha(scriptSha1, returnType, numKeys, keysAndArgs), Converters.identityConverter());
2049+
return convertAndReturn(delegate.evalSha(scriptSha1, returnType, numKeys, keysAndArgs),
2050+
Converters.identityConverter());
18272051
}
18282052

18292053
/*
@@ -1832,7 +2056,8 @@ public <T> T evalSha(String scriptSha1, ReturnType returnType, int numKeys, byte
18322056
*/
18332057
@Override
18342058
public <T> T evalSha(byte[] scriptSha1, ReturnType returnType, int numKeys, byte[]... keysAndArgs) {
1835-
return convertAndReturn(delegate.evalSha(scriptSha1, returnType, numKeys, keysAndArgs), Converters.identityConverter());
2059+
return convertAndReturn(delegate.evalSha(scriptSha1, returnType, numKeys, keysAndArgs),
2060+
Converters.identityConverter());
18362061
}
18372062

18382063
//
@@ -1919,6 +2144,7 @@ public String bRPopLPush(int timeout, String srcKey, String dstKey) {
19192144
public Boolean copy(String sourceKey, String targetKey, boolean replace) {
19202145
return copy(serialize(sourceKey), serialize(targetKey), replace);
19212146
}
2147+
19222148
/*
19232149
* (non-Javadoc)
19242150
* @see org.springframework.data.redis.connection.StringRedisConnection#decr(java.lang.String)
@@ -1946,7 +2172,6 @@ public Long del(String... keys) {
19462172
return del(serializeMulti(keys));
19472173
}
19482174

1949-
19502175
/*
19512176
* (non-Javadoc)
19522177
* @see org.springframework.data.redis.connection.StringRedisConnection#unlink(java.lang.String[])
@@ -3959,7 +4184,8 @@ public RecordId xAdd(StringRecord record, XAddOptions options) {
39594184
*/
39604185
@Override
39614186
public List<RecordId> xClaimJustId(String key, String group, String consumer, XClaimOptions options) {
3962-
return convertAndReturn(delegate.xClaimJustId(serialize(key), group, consumer, options), Converters.identityConverter());
4187+
return convertAndReturn(delegate.xClaimJustId(serialize(key), group, consumer, options),
4188+
Converters.identityConverter());
39634189
}
39644190

39654191
/*
@@ -3996,7 +4222,8 @@ public String xGroupCreate(String key, ReadOffset readOffset, String group) {
39964222
*/
39974223
@Override
39984224
public String xGroupCreate(String key, ReadOffset readOffset, String group, boolean mkStream) {
3999-
return convertAndReturn(delegate.xGroupCreate(serialize(key), group, readOffset, mkStream), Converters.identityConverter());
4225+
return convertAndReturn(delegate.xGroupCreate(serialize(key), group, readOffset, mkStream),
4226+
Converters.identityConverter());
40004227
}
40014228

40024229
/*
@@ -4069,7 +4296,8 @@ public PendingMessagesSummary xPending(String key, String groupName) {
40694296
@Override
40704297
public PendingMessages xPending(String key, String groupName, String consumer,
40714298
org.springframework.data.domain.Range<String> range, Long count) {
4072-
return convertAndReturn(delegate.xPending(serialize(key), groupName, consumer, range, count), Converters.identityConverter());
4299+
return convertAndReturn(delegate.xPending(serialize(key), groupName, consumer, range, count),
4300+
Converters.identityConverter());
40734301
}
40744302

40754303
/*
@@ -4366,7 +4594,8 @@ private <T> T convertAndReturn(@Nullable Object value, Converter converter) {
43664594
}
43674595

43684596
return value == null ? null
4369-
: ObjectUtils.nullSafeEquals(converter, Converters.identityConverter()) ? (T) value : (T) converter.convert(value);
4597+
: ObjectUtils.nullSafeEquals(converter, Converters.identityConverter()) ? (T) value
4598+
: (T) converter.convert(value);
43704599
}
43714600

43724601
private void addResultConverter(Converter<?, ?> converter) {

0 commit comments

Comments
 (0)