Skip to content

Commit aa9397a

Browse files
authored
Support TDIGEST commands (#3097)
* Support TDIGEST commands * Separate package for RedisBloom commands * TDIGEST.MERGE only one source * Pipeline TDIGEST commands * JavaDocs * TDIGEST.QUANTILE change * Address CREATE COMPRESSION change * Revert "Separate package for RedisBloom commands" * Address TDIGEST.CDF and other changes * Address TDIGEST.MERGE changes
1 parent 9a69fb3 commit aa9397a

18 files changed

+721
-40
lines changed

src/main/java/redis/clients/jedis/BuilderFactory.java

+7-7
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ public String toString() {
7676
@Override
7777
public Map<String, Object> build(Object data) {
7878
final List list = (List) data;
79-
final Map<String, Object> map = new HashMap<>(list.size() / 2, 1);
79+
final Map<String, Object> map = new HashMap<>(list.size() / 2, 1f);
8080
final Iterator iterator = list.iterator();
8181
while (iterator.hasNext()) {
8282
map.put(STRING.build(iterator.next()), ENCODED_OBJECT.build(iterator.next()));
@@ -361,7 +361,7 @@ public String toString() {
361361
@SuppressWarnings("unchecked")
362362
public Map<String, String> build(Object data) {
363363
final List<byte[]> flatHash = (List<byte[]>) data;
364-
final Map<String, String> hash = new HashMap<>(flatHash.size() / 2, 1);
364+
final Map<String, String> hash = new HashMap<>(flatHash.size() / 2, 1f);
365365
final Iterator<byte[]> iterator = flatHash.iterator();
366366
while (iterator.hasNext()) {
367367
hash.put(SafeEncoder.encode(iterator.next()), SafeEncoder.encode(iterator.next()));
@@ -660,7 +660,7 @@ public ScanResult<byte[]> build(Object data) {
660660
@SuppressWarnings("unchecked")
661661
public Map<String, Long> build(Object data) {
662662
final List<Object> flatHash = (List<Object>) data;
663-
final Map<String, Long> hash = new HashMap<>(flatHash.size() / 2, 1);
663+
final Map<String, Long> hash = new HashMap<>(flatHash.size() / 2, 1f);
664664
final Iterator<Object> iterator = flatHash.iterator();
665665
while (iterator.hasNext()) {
666666
hash.put(SafeEncoder.encode((byte[]) iterator.next()), (Long) iterator.next());
@@ -770,7 +770,7 @@ public Map<String, CommandDocument> build(Object data) {
770770
}
771771

772772
List<Object> list = (List<Object>) data;
773-
Map<String, CommandDocument> map = new HashMap<>(list.size());
773+
Map<String, CommandDocument> map = new HashMap<>(list.size() / 2, 1f);
774774

775775
for (int i = 0; i < list.size();) {
776776
String name = STRING.build(list.get(i++));
@@ -1009,7 +1009,7 @@ public StreamEntry build(Object data) {
10091009
List<byte[]> hash = (List<byte[]>) objectList.get(1);
10101010

10111011
Iterator<byte[]> hashIterator = hash.iterator();
1012-
Map<String, String> map = new HashMap<>(hash.size() / 2);
1012+
Map<String, String> map = new HashMap<>(hash.size() / 2, 1f);
10131013
while (hashIterator.hasNext()) {
10141014
map.put(SafeEncoder.encode(hashIterator.next()), SafeEncoder.encode(hashIterator.next()));
10151015
}
@@ -1050,7 +1050,7 @@ public List<StreamEntry> build(Object data) {
10501050
}
10511051

10521052
Iterator<byte[]> hashIterator = hash.iterator();
1053-
Map<String, String> map = new HashMap<>(hash.size() / 2);
1053+
Map<String, String> map = new HashMap<>(hash.size() / 2, 1f);
10541054
while (hashIterator.hasNext()) {
10551055
map.put(SafeEncoder.encode(hashIterator.next()), SafeEncoder.encode(hashIterator.next()));
10561056
}
@@ -1671,7 +1671,7 @@ public AggregationResult build(Object data) {
16711671
@Override
16721672
public Map<String, List<String>> build(Object data) {
16731673
List<Object> list = (List<Object>) data;
1674-
Map<String, List<String>> dump = new HashMap<>(list.size() / 2);
1674+
Map<String, List<String>> dump = new HashMap<>(list.size() / 2, 1f);
16751675
for (int i = 0; i < list.size(); i += 2) {
16761676
dump.put(STRING.build(list.get(i)), STRING_LIST.build(list.get(i + 1)));
16771677
}

src/main/java/redis/clients/jedis/CommandArguments.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,11 @@ public CommandArguments addObjects(Object... args) {
5353
}
5454

5555
public CommandArguments addObjects(Collection args) {
56-
for (Object arg : args) {
57-
add(arg);
58-
}
56+
args.forEach(arg -> add(arg));
5957
return this;
6058
}
6159

60+
@Deprecated
6261
public CommandArguments addObjects(int[] ints) {
6362
for (int i : ints) {
6463
add(i);

src/main/java/redis/clients/jedis/CommandObjects.java

+65
Original file line numberDiff line numberDiff line change
@@ -3877,6 +3877,71 @@ public final CommandObject<List<String>> topkList(String key) {
38773877
public final CommandObject<Map<String, Object>> topkInfo(String key) {
38783878
return new CommandObject<>(commandArguments(TopKCommand.INFO).key(key), BuilderFactory.ENCODED_OBJECT_MAP);
38793879
}
3880+
3881+
public final CommandObject<String> tdigestCreate(String key) {
3882+
return new CommandObject<>(commandArguments(TDigestCommand.CREATE).key(key), BuilderFactory.STRING);
3883+
}
3884+
3885+
public final CommandObject<String> tdigestCreate(String key, int compression) {
3886+
return new CommandObject<>(commandArguments(TDigestCommand.CREATE).key(key).add(RedisBloomKeyword.COMPRESSION)
3887+
.add(compression), BuilderFactory.STRING);
3888+
}
3889+
3890+
public final CommandObject<String> tdigestReset(String key) {
3891+
return new CommandObject<>(commandArguments(TDigestCommand.RESET).key(key), BuilderFactory.STRING);
3892+
}
3893+
3894+
public final CommandObject<String> tdigestMerge(String destinationKey, String... sourceKeys) {
3895+
return new CommandObject<>(commandArguments(TDigestCommand.MERGE).key(destinationKey)
3896+
.add(sourceKeys.length).keys((Object[]) sourceKeys), BuilderFactory.STRING);
3897+
}
3898+
3899+
public final CommandObject<String> tdigestMerge(TDigestMergeParams mergeParams,
3900+
String destinationKey, String... sourceKeys) {
3901+
return new CommandObject<>(commandArguments(TDigestCommand.MERGE).key(destinationKey)
3902+
.add(sourceKeys.length).keys((Object[]) sourceKeys).addParams(mergeParams), BuilderFactory.STRING);
3903+
}
3904+
3905+
public final CommandObject<Map<String, Object>> tdigestInfo(String key) {
3906+
return new CommandObject<>(commandArguments(TDigestCommand.INFO).key(key), BuilderFactory.ENCODED_OBJECT_MAP);
3907+
}
3908+
3909+
public final CommandObject<String> tdigestAdd(String key, Map.Entry<Double, Long>... valueWeights) {
3910+
CommandArguments args = commandArguments(TDigestCommand.ADD).key(key);
3911+
for (Map.Entry<Double, Long> vw : valueWeights) {
3912+
args.add(vw.getKey()).add(vw.getValue());
3913+
}
3914+
return new CommandObject<>(args, BuilderFactory.STRING);
3915+
}
3916+
3917+
public final CommandObject<List<Double>> tdigestCDF(String key, double... values) {
3918+
CommandArguments args = commandArguments(TDigestCommand.CDF).key(key);
3919+
for (double value : values) {
3920+
args.add(value);
3921+
}
3922+
return new CommandObject<>(args, BuilderFactory.DOUBLE_LIST);
3923+
}
3924+
3925+
public final CommandObject<List<Double>> tdigestQuantile(String key, double... quantiles) {
3926+
CommandArguments args = commandArguments(TDigestCommand.QUANTILE).key(key);
3927+
for (double quantile : quantiles) {
3928+
args.add(quantile);
3929+
}
3930+
return new CommandObject<>(args, BuilderFactory.DOUBLE_LIST);
3931+
}
3932+
3933+
public final CommandObject<Double> tdigestMin(String key) {
3934+
return new CommandObject<>(commandArguments(TDigestCommand.MIN).key(key), BuilderFactory.DOUBLE);
3935+
}
3936+
3937+
public final CommandObject<Double> tdigestMax(String key) {
3938+
return new CommandObject<>(commandArguments(TDigestCommand.MAX).key(key), BuilderFactory.DOUBLE);
3939+
}
3940+
3941+
public final CommandObject<Double> tdigestTrimmedMean(String key, double lowCutQuantile, double highCutQuantile) {
3942+
return new CommandObject<>(commandArguments(TDigestCommand.TRIMMED_MEAN).key(key).add(lowCutQuantile)
3943+
.add(highCutQuantile), BuilderFactory.DOUBLE);
3944+
}
38803945
// RedisBloom commands
38813946

38823947
// RedisGraph commands

src/main/java/redis/clients/jedis/MultiNodePipelineBase.java

+61-4
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,7 @@
1313
import org.slf4j.LoggerFactory;
1414

1515
import redis.clients.jedis.args.*;
16-
import redis.clients.jedis.bloom.BFInsertParams;
17-
import redis.clients.jedis.bloom.BFReserveParams;
18-
import redis.clients.jedis.bloom.CFInsertParams;
19-
import redis.clients.jedis.bloom.CFReserveParams;
16+
import redis.clients.jedis.bloom.*;
2017
import redis.clients.jedis.commands.PipelineBinaryCommands;
2118
import redis.clients.jedis.commands.PipelineCommands;
2219
import redis.clients.jedis.commands.RedisModulePipelineCommands;
@@ -4152,6 +4149,66 @@ public Response<List<String>> topkList(String key) {
41524149
public Response<Map<String, Object>> topkInfo(String key) {
41534150
return appendCommand(commandObjects.topkInfo(key));
41544151
}
4152+
4153+
@Override
4154+
public Response<String> tdigestCreate(String key) {
4155+
return appendCommand(commandObjects.tdigestCreate(key));
4156+
}
4157+
4158+
@Override
4159+
public Response<String> tdigestCreate(String key, int compression) {
4160+
return appendCommand(commandObjects.tdigestCreate(key, compression));
4161+
}
4162+
4163+
@Override
4164+
public Response<String> tdigestReset(String key) {
4165+
return appendCommand(commandObjects.tdigestReset(key));
4166+
}
4167+
4168+
@Override
4169+
public Response<String> tdigestMerge(String destinationKey, String... sourceKeys) {
4170+
return appendCommand(commandObjects.tdigestMerge(destinationKey, sourceKeys));
4171+
}
4172+
4173+
@Override
4174+
public Response<String> tdigestMerge(TDigestMergeParams mergeParams, String destinationKey, String... sourceKeys) {
4175+
return appendCommand(commandObjects.tdigestMerge(mergeParams, destinationKey, sourceKeys));
4176+
}
4177+
4178+
@Override
4179+
public Response<Map<String, Object>> tdigestInfo(String key) {
4180+
return appendCommand(commandObjects.tdigestInfo(key));
4181+
}
4182+
4183+
@Override
4184+
public Response<String> tdigestAdd(String key, Map.Entry<Double, Long>... valueWeights) {
4185+
return appendCommand(commandObjects.tdigestAdd(key, valueWeights));
4186+
}
4187+
4188+
@Override
4189+
public Response<List<Double>> tdigestCDF(String key, double... values) {
4190+
return appendCommand(commandObjects.tdigestCDF(key, values));
4191+
}
4192+
4193+
@Override
4194+
public Response<List<Double>> tdigestQuantile(String key, double... quantiles) {
4195+
return appendCommand(commandObjects.tdigestQuantile(key, quantiles));
4196+
}
4197+
4198+
@Override
4199+
public Response<Double> tdigestMin(String key) {
4200+
return appendCommand(commandObjects.tdigestMin(key));
4201+
}
4202+
4203+
@Override
4204+
public Response<Double> tdigestMax(String key) {
4205+
return appendCommand(commandObjects.tdigestMax(key));
4206+
}
4207+
4208+
@Override
4209+
public Response<Double> tdigestTrimmedMean(String key, double lowCutQuantile, double highCutQuantile) {
4210+
return appendCommand(commandObjects.tdigestTrimmedMean(key, lowCutQuantile, highCutQuantile));
4211+
}
41554212
// RedisBloom commands
41564213

41574214
// RedisGraph commands

src/main/java/redis/clients/jedis/Pipeline.java

+61-4
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,7 @@
88
import org.json.JSONArray;
99

1010
import redis.clients.jedis.args.*;
11-
import redis.clients.jedis.bloom.BFInsertParams;
12-
import redis.clients.jedis.bloom.BFReserveParams;
13-
import redis.clients.jedis.bloom.CFInsertParams;
14-
import redis.clients.jedis.bloom.CFReserveParams;
11+
import redis.clients.jedis.bloom.*;
1512
import redis.clients.jedis.commands.DatabasePipelineCommands;
1613
import redis.clients.jedis.commands.PipelineBinaryCommands;
1714
import redis.clients.jedis.commands.PipelineCommands;
@@ -4131,6 +4128,66 @@ public Response<List<String>> topkList(String key) {
41314128
public Response<Map<String, Object>> topkInfo(String key) {
41324129
return appendCommand(commandObjects.topkInfo(key));
41334130
}
4131+
4132+
@Override
4133+
public Response<String> tdigestCreate(String key) {
4134+
return appendCommand(commandObjects.tdigestCreate(key));
4135+
}
4136+
4137+
@Override
4138+
public Response<String> tdigestCreate(String key, int compression) {
4139+
return appendCommand(commandObjects.tdigestCreate(key, compression));
4140+
}
4141+
4142+
@Override
4143+
public Response<String> tdigestReset(String key) {
4144+
return appendCommand(commandObjects.tdigestReset(key));
4145+
}
4146+
4147+
@Override
4148+
public Response<String> tdigestMerge(String destinationKey, String... sourceKeys) {
4149+
return appendCommand(commandObjects.tdigestMerge(destinationKey, sourceKeys));
4150+
}
4151+
4152+
@Override
4153+
public Response<String> tdigestMerge(TDigestMergeParams mergeParams, String destinationKey, String... sourceKeys) {
4154+
return appendCommand(commandObjects.tdigestMerge(mergeParams, destinationKey, sourceKeys));
4155+
}
4156+
4157+
@Override
4158+
public Response<Map<String, Object>> tdigestInfo(String key) {
4159+
return appendCommand(commandObjects.tdigestInfo(key));
4160+
}
4161+
4162+
@Override
4163+
public Response<String> tdigestAdd(String key, Map.Entry<Double, Long>... valueWeights) {
4164+
return appendCommand(commandObjects.tdigestAdd(key, valueWeights));
4165+
}
4166+
4167+
@Override
4168+
public Response<List<Double>> tdigestCDF(String key, double... values) {
4169+
return appendCommand(commandObjects.tdigestCDF(key, values));
4170+
}
4171+
4172+
@Override
4173+
public Response<List<Double>> tdigestQuantile(String key, double... quantiles) {
4174+
return appendCommand(commandObjects.tdigestQuantile(key, quantiles));
4175+
}
4176+
4177+
@Override
4178+
public Response<Double> tdigestMin(String key) {
4179+
return appendCommand(commandObjects.tdigestMin(key));
4180+
}
4181+
4182+
@Override
4183+
public Response<Double> tdigestMax(String key) {
4184+
return appendCommand(commandObjects.tdigestMax(key));
4185+
}
4186+
4187+
@Override
4188+
public Response<Double> tdigestTrimmedMean(String key, double lowCutQuantile, double highCutQuantile) {
4189+
return appendCommand(commandObjects.tdigestTrimmedMean(key, lowCutQuantile, highCutQuantile));
4190+
}
41344191
// RedisBloom commands
41354192

41364193
// RedisGraph commands

src/main/java/redis/clients/jedis/TransactionBase.java

+61-4
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,7 @@
1414
import org.json.JSONArray;
1515

1616
import redis.clients.jedis.args.*;
17-
import redis.clients.jedis.bloom.BFInsertParams;
18-
import redis.clients.jedis.bloom.BFReserveParams;
19-
import redis.clients.jedis.bloom.CFInsertParams;
20-
import redis.clients.jedis.bloom.CFReserveParams;
17+
import redis.clients.jedis.bloom.*;
2118
import redis.clients.jedis.commands.PipelineBinaryCommands;
2219
import redis.clients.jedis.commands.PipelineCommands;
2320
import redis.clients.jedis.commands.ProtocolCommand;
@@ -4199,6 +4196,66 @@ public Response<List<String>> topkList(String key) {
41994196
public Response<Map<String, Object>> topkInfo(String key) {
42004197
return appendCommand(commandObjects.topkInfo(key));
42014198
}
4199+
4200+
@Override
4201+
public Response<String> tdigestCreate(String key) {
4202+
return appendCommand(commandObjects.tdigestCreate(key));
4203+
}
4204+
4205+
@Override
4206+
public Response<String> tdigestCreate(String key, int compression) {
4207+
return appendCommand(commandObjects.tdigestCreate(key, compression));
4208+
}
4209+
4210+
@Override
4211+
public Response<String> tdigestReset(String key) {
4212+
return appendCommand(commandObjects.tdigestReset(key));
4213+
}
4214+
4215+
@Override
4216+
public Response<String> tdigestMerge(String destinationKey, String... sourceKeys) {
4217+
return appendCommand(commandObjects.tdigestMerge(destinationKey, sourceKeys));
4218+
}
4219+
4220+
@Override
4221+
public Response<String> tdigestMerge(TDigestMergeParams mergeParams, String destinationKey, String... sourceKeys) {
4222+
return appendCommand(commandObjects.tdigestMerge(mergeParams, destinationKey, sourceKeys));
4223+
}
4224+
4225+
@Override
4226+
public Response<Map<String, Object>> tdigestInfo(String key) {
4227+
return appendCommand(commandObjects.tdigestInfo(key));
4228+
}
4229+
4230+
@Override
4231+
public Response<String> tdigestAdd(String key, Map.Entry<Double, Long>... valueWeights) {
4232+
return appendCommand(commandObjects.tdigestAdd(key, valueWeights));
4233+
}
4234+
4235+
@Override
4236+
public Response<List<Double>> tdigestCDF(String key, double... values) {
4237+
return appendCommand(commandObjects.tdigestCDF(key, values));
4238+
}
4239+
4240+
@Override
4241+
public Response<List<Double>> tdigestQuantile(String key, double... quantiles) {
4242+
return appendCommand(commandObjects.tdigestQuantile(key, quantiles));
4243+
}
4244+
4245+
@Override
4246+
public Response<Double> tdigestMin(String key) {
4247+
return appendCommand(commandObjects.tdigestMin(key));
4248+
}
4249+
4250+
@Override
4251+
public Response<Double> tdigestMax(String key) {
4252+
return appendCommand(commandObjects.tdigestMax(key));
4253+
}
4254+
4255+
@Override
4256+
public Response<Double> tdigestTrimmedMean(String key, double lowCutQuantile, double highCutQuantile) {
4257+
return appendCommand(commandObjects.tdigestTrimmedMean(key, lowCutQuantile, highCutQuantile));
4258+
}
42024259
// RedisBloom commands
42034260

42044261
// RedisGraph commands

0 commit comments

Comments
 (0)