Skip to content

Commit 1c30d69

Browse files
mp911dechristophstrobl
authored andcommitted
Add imperative support for ZDIFF, ZDIFFSTORE, ZINTER, and ZUNION commands.
See: #2041 & #2042 Original Pull Request: #2097
1 parent 755c841 commit 1c30d69

18 files changed

+2310
-262
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`, `GETEX`, `GETDEL`, `ZPOPMIN`, `BZPOPMIN`, `ZPOPMAX`, `BZPOPMAX`, `ZMSCORE`).
10+
* Support Redis 6.2 commands (`LPOP`/`RPOP` with `count`, `COPY`, `GETEX`, `GETDEL`, `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

+199-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[][])
@@ -1453,6 +1453,127 @@ public Double zIncrBy(byte[] key, double increment, byte[] value) {
14531453
return convertAndReturn(delegate.zIncrBy(key, increment, value), Converters.identityConverter());
14541454
}
14551455

1456+
/*
1457+
* (non-Javadoc)
1458+
* @see org.springframework.data.redis.connection.RedisZSetCommands#zDiff(byte[][])
1459+
*/
1460+
@Nullable
1461+
@Override
1462+
public Set<byte[]> zDiff(byte[]... sets) {
1463+
return convertAndReturn(delegate.zDiff(sets), Converters.identityConverter());
1464+
}
1465+
1466+
/*
1467+
* (non-Javadoc)
1468+
* @see org.springframework.data.redis.connection.RedisZSetCommands#zDiffWithScores(byte[][])
1469+
*/
1470+
@Nullable
1471+
@Override
1472+
public Set<Tuple> zDiffWithScores(byte[]... sets) {
1473+
return convertAndReturn(delegate.zDiffWithScores(sets), Converters.identityConverter());
1474+
}
1475+
1476+
/*
1477+
* (non-Javadoc)
1478+
* @see org.springframework.data.redis.connection.RedisZSetCommands#zDiffStore(byte[], byte[][])
1479+
*/
1480+
@Nullable
1481+
@Override
1482+
public Long zDiffStore(byte[] destKey, byte[]... sets) {
1483+
return convertAndReturn(delegate.zDiffStore(destKey, sets), Converters.identityConverter());
1484+
}
1485+
1486+
/*
1487+
* (non-Javadoc)
1488+
* @see org.springframework.data.redis.connection.StringRedisConnection#zDiff(java.lang.String[])
1489+
*/
1490+
@Nullable
1491+
@Override
1492+
public Set<String> zDiff(String... sets) {
1493+
return convertAndReturn(delegate.zDiff(serializeMulti(sets)), byteSetToStringSet);
1494+
}
1495+
1496+
/*
1497+
* (non-Javadoc)
1498+
* @see org.springframework.data.redis.connection.StringRedisConnection#zDiffWithScores(java.lang.String[])
1499+
*/
1500+
@Nullable
1501+
@Override
1502+
public Set<StringTuple> zDiffWithScores(String... sets) {
1503+
return convertAndReturn(delegate.zDiffWithScores(serializeMulti(sets)), tupleToStringTuple);
1504+
}
1505+
1506+
/*
1507+
* (non-Javadoc)
1508+
* @see org.springframework.data.redis.connection.StringRedisConnection#zDiffStore(java.lang.String, java.lang.String[])
1509+
*/
1510+
@Nullable
1511+
@Override
1512+
public Long zDiffStore(String destKey, String... sets) {
1513+
return convertAndReturn(delegate.zDiffStore(serialize(destKey), serializeMulti(sets)),
1514+
Converters.identityConverter());
1515+
}
1516+
1517+
/*
1518+
* (non-Javadoc)
1519+
* @see org.springframework.data.redis.connection.RedisZSetCommands#zInter(byte[][])
1520+
*/
1521+
@Nullable
1522+
@Override
1523+
public Set<byte[]> zInter(byte[]... sets) {
1524+
return convertAndReturn(delegate.zInter(sets), Converters.identityConverter());
1525+
}
1526+
1527+
/*
1528+
* (non-Javadoc)
1529+
* @see org.springframework.data.redis.connection.RedisZSetCommands#zInterWithScores(byte[][])
1530+
*/
1531+
@Nullable
1532+
@Override
1533+
public Set<Tuple> zInterWithScores(byte[]... sets) {
1534+
return convertAndReturn(delegate.zInterWithScores(sets), Converters.identityConverter());
1535+
}
1536+
1537+
/*
1538+
* (non-Javadoc)
1539+
* @see org.springframework.data.redis.connection.RedisZSetCommands#zInterWithScores(org.springframework.data.redis.connection.RedisZSetCommands.Aggregate, org.springframework.data.redis.connection.RedisZSetCommands.Weights, byte[][])
1540+
*/
1541+
@Nullable
1542+
@Override
1543+
public Set<Tuple> zInterWithScores(Aggregate aggregate, Weights weights, byte[]... sets) {
1544+
return convertAndReturn(delegate.zInterWithScores(aggregate, weights, sets), Converters.identityConverter());
1545+
}
1546+
1547+
/*
1548+
* (non-Javadoc)
1549+
* @see org.springframework.data.redis.connection.StringRedisConnection#zInter(java.lang.String[])
1550+
*/
1551+
@Nullable
1552+
@Override
1553+
public Set<String> zInter(String... sets) {
1554+
return convertAndReturn(delegate.zInter(serializeMulti(sets)), byteSetToStringSet);
1555+
}
1556+
1557+
/*
1558+
* (non-Javadoc)
1559+
* @see org.springframework.data.redis.connection.StringRedisConnection#zInterWithScores(java.lang.String[])
1560+
*/
1561+
@Nullable
1562+
@Override
1563+
public Set<StringTuple> zInterWithScores(String... sets) {
1564+
return convertAndReturn(delegate.zInterWithScores(serializeMulti(sets)), tupleToStringTuple);
1565+
}
1566+
1567+
/*
1568+
* (non-Javadoc)
1569+
* @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[])
1570+
*/
1571+
@Nullable
1572+
@Override
1573+
public Set<StringTuple> zInterWithScores(Aggregate aggregate, Weights weights, String... sets) {
1574+
return convertAndReturn(delegate.zInterWithScores(aggregate, weights, serializeMulti(sets)), tupleToStringTuple);
1575+
}
1576+
14561577
/*
14571578
* (non-Javadoc)
14581579
* @see org.springframework.data.redis.connection.RedisZSetCommands#zInterStore(byte[], org.springframework.data.redis.connection.RedisZSetCommands.Aggregate, org.springframework.data.redis.connection.RedisZSetCommands.Weights, byte[][])
@@ -1531,7 +1652,8 @@ public Set<byte[]> zRangeByScore(byte[] key, double min, double max) {
15311652
*/
15321653
@Override
15331654
public Set<Tuple> zRangeByScoreWithScores(byte[] key, double min, double max, long offset, long count) {
1534-
return convertAndReturn(delegate.zRangeByScoreWithScores(key, min, max, offset, count), Converters.identityConverter());
1655+
return convertAndReturn(delegate.zRangeByScoreWithScores(key, min, max, offset, count),
1656+
Converters.identityConverter());
15351657
}
15361658

15371659
/*
@@ -1603,7 +1725,8 @@ public Set<byte[]> zRevRangeByScore(byte[] key, Range range, Limit limit) {
16031725
*/
16041726
@Override
16051727
public Set<Tuple> zRevRangeByScoreWithScores(byte[] key, double min, double max, long offset, long count) {
1606-
return convertAndReturn(delegate.zRevRangeByScoreWithScores(key, min, max, offset, count), Converters.identityConverter());
1728+
return convertAndReturn(delegate.zRevRangeByScoreWithScores(key, min, max, offset, count),
1729+
Converters.identityConverter());
16071730
}
16081731

16091732
/*
@@ -1732,6 +1855,66 @@ public List<Double> zMScore(byte[] key, byte[]... values) {
17321855
return convertAndReturn(delegate.zMScore(key, values), Converters.identityConverter());
17331856
}
17341857

1858+
/*
1859+
* (non-Javadoc)
1860+
* @see org.springframework.data.redis.connection.RedisZSetCommands#zUnion(byte[][])
1861+
*/
1862+
@Nullable
1863+
@Override
1864+
public Set<byte[]> zUnion(byte[]... sets) {
1865+
return convertAndReturn(delegate.zUnion(sets), Converters.identityConverter());
1866+
}
1867+
1868+
/*
1869+
* (non-Javadoc)
1870+
* @see org.springframework.data.redis.connection.RedisZSetCommands#zUnionWithScores(byte[][])
1871+
*/
1872+
@Nullable
1873+
@Override
1874+
public Set<Tuple> zUnionWithScores(byte[]... sets) {
1875+
return convertAndReturn(delegate.zUnionWithScores(sets), Converters.identityConverter());
1876+
}
1877+
1878+
/*
1879+
* (non-Javadoc)
1880+
* @see org.springframework.data.redis.connection.RedisZSetCommands#zUnionWithScores(org.springframework.data.redis.connection.RedisZSetCommands.Aggregate, org.springframework.data.redis.connection.RedisZSetCommands.Weights, byte[][])
1881+
*/
1882+
@Nullable
1883+
@Override
1884+
public Set<Tuple> zUnionWithScores(Aggregate aggregate, Weights weights, byte[]... sets) {
1885+
return convertAndReturn(delegate.zUnionWithScores(aggregate, weights, sets), Converters.identityConverter());
1886+
}
1887+
1888+
/*
1889+
* (non-Javadoc)
1890+
* @see org.springframework.data.redis.connection.StringRedisConnection#zUnion(java.lang.String[])
1891+
*/
1892+
@Nullable
1893+
@Override
1894+
public Set<String> zUnion(String... sets) {
1895+
return convertAndReturn(delegate.zUnion(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+
17351918
/*
17361919
* (non-Javadoc)
17371920
* @see org.springframework.data.redis.connection.RedisZSetCommands#zUnionStore(byte[], org.springframework.data.redis.connection.RedisZSetCommands.Aggregate, org.springframework.data.redis.connection.RedisZSetCommands.Weights, byte[][])
@@ -1863,7 +2046,8 @@ public <T> T eval(byte[] script, ReturnType returnType, int numKeys, byte[]... k
18632046
*/
18642047
@Override
18652048
public <T> T evalSha(String scriptSha1, ReturnType returnType, int numKeys, byte[]... keysAndArgs) {
1866-
return convertAndReturn(delegate.evalSha(scriptSha1, returnType, numKeys, keysAndArgs), Converters.identityConverter());
2049+
return convertAndReturn(delegate.evalSha(scriptSha1, returnType, numKeys, keysAndArgs),
2050+
Converters.identityConverter());
18672051
}
18682052

18692053
/*
@@ -1872,7 +2056,8 @@ public <T> T evalSha(String scriptSha1, ReturnType returnType, int numKeys, byte
18722056
*/
18732057
@Override
18742058
public <T> T evalSha(byte[] scriptSha1, ReturnType returnType, int numKeys, byte[]... keysAndArgs) {
1875-
return convertAndReturn(delegate.evalSha(scriptSha1, returnType, numKeys, keysAndArgs), Converters.identityConverter());
2059+
return convertAndReturn(delegate.evalSha(scriptSha1, returnType, numKeys, keysAndArgs),
2060+
Converters.identityConverter());
18762061
}
18772062

18782063
//
@@ -1959,6 +2144,7 @@ public String bRPopLPush(int timeout, String srcKey, String dstKey) {
19592144
public Boolean copy(String sourceKey, String targetKey, boolean replace) {
19602145
return copy(serialize(sourceKey), serialize(targetKey), replace);
19612146
}
2147+
19622148
/*
19632149
* (non-Javadoc)
19642150
* @see org.springframework.data.redis.connection.StringRedisConnection#decr(java.lang.String)
@@ -1986,7 +2172,6 @@ public Long del(String... keys) {
19862172
return del(serializeMulti(keys));
19872173
}
19882174

1989-
19902175
/*
19912176
* (non-Javadoc)
19922177
* @see org.springframework.data.redis.connection.StringRedisConnection#unlink(java.lang.String[])
@@ -3999,7 +4184,8 @@ public RecordId xAdd(StringRecord record, XAddOptions options) {
39994184
*/
40004185
@Override
40014186
public List<RecordId> xClaimJustId(String key, String group, String consumer, XClaimOptions options) {
4002-
return convertAndReturn(delegate.xClaimJustId(serialize(key), group, consumer, options), Converters.identityConverter());
4187+
return convertAndReturn(delegate.xClaimJustId(serialize(key), group, consumer, options),
4188+
Converters.identityConverter());
40034189
}
40044190

40054191
/*
@@ -4036,7 +4222,8 @@ public String xGroupCreate(String key, ReadOffset readOffset, String group) {
40364222
*/
40374223
@Override
40384224
public String xGroupCreate(String key, ReadOffset readOffset, String group, boolean mkStream) {
4039-
return convertAndReturn(delegate.xGroupCreate(serialize(key), group, readOffset, mkStream), Converters.identityConverter());
4225+
return convertAndReturn(delegate.xGroupCreate(serialize(key), group, readOffset, mkStream),
4226+
Converters.identityConverter());
40404227
}
40414228

40424229
/*
@@ -4109,7 +4296,8 @@ public PendingMessagesSummary xPending(String key, String groupName) {
41094296
@Override
41104297
public PendingMessages xPending(String key, String groupName, String consumer,
41114298
org.springframework.data.domain.Range<String> range, Long count) {
4112-
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());
41134301
}
41144302

41154303
/*
@@ -4406,7 +4594,8 @@ private <T> T convertAndReturn(@Nullable Object value, Converter converter) {
44064594
}
44074595

44084596
return value == null ? null
4409-
: ObjectUtils.nullSafeEquals(converter, Converters.identityConverter()) ? (T) value : (T) converter.convert(value);
4597+
: ObjectUtils.nullSafeEquals(converter, Converters.identityConverter()) ? (T) value
4598+
: (T) converter.convert(value);
44104599
}
44114600

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

0 commit comments

Comments
 (0)