Implemented ZUNIONSTORE and ZINTERSTORE

This commit is contained in:
Jonathan Leibiusky
2010-08-07 20:28:26 -03:00
parent 84f4c45004
commit 4a7697911d
5 changed files with 168 additions and 5 deletions

View File

@@ -473,4 +473,42 @@ public class Client extends Connection {
sendCommand("ZREMRANGEBYSCORE", key, String.valueOf(start), String
.valueOf(end));
}
}
public void zunionstore(String dstkey, String... sets) {
String[] params = new String[sets.length + 2];
params[0] = dstkey;
params[1] = String.valueOf(sets.length);
System.arraycopy(sets, 0, params, 2, sets.length);
sendCommand("ZUNIONSTORE", params);
}
public void zunionstore(String dstkey, ZParams params, String... sets) {
List<String> args = new ArrayList<String>();
args.add(dstkey);
args.add(String.valueOf(sets.length));
for (String set : sets) {
args.add(set);
}
args.addAll(params.getParams());
sendCommand("ZUNIONSTORE", args.toArray(new String[args.size()]));
}
public void zinterstore(String dstkey, String... sets) {
String[] params = new String[sets.length + 2];
params[0] = dstkey;
params[1] = String.valueOf(sets.length);
System.arraycopy(sets, 0, params, 2, sets.length);
sendCommand("ZINTERSTORE", params);
}
public void zinterstore(String dstkey, ZParams params, String... sets) {
List<String> args = new ArrayList<String>();
args.add(dstkey);
args.add(String.valueOf(sets.length));
for (String set : sets) {
args.add(set);
}
args.addAll(params.getParams());
sendCommand("ZINTERSTORE", args.toArray(new String[args.size()]));
}
}

View File

@@ -582,4 +582,24 @@ public class Jedis {
client.zremrangeByScore(key, start, end);
return client.getIntegerReply();
}
public int zunionstore(String dstkey, String... sets) {
client.zunionstore(dstkey, sets);
return client.getIntegerReply();
}
public int zunionstore(String dstkey, ZParams params, String... sets) {
client.zunionstore(dstkey, params, sets);
return client.getIntegerReply();
}
public int zinterstore(String dstkey, String... sets) {
client.zinterstore(dstkey, sets);
return client.getIntegerReply();
}
public int zinterstore(String dstkey, ZParams params, String... sets) {
client.zinterstore(dstkey, params, sets);
return client.getIntegerReply();
}
}

View File

@@ -0,0 +1,33 @@
package redis.clients.jedis;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public class ZParams {
public enum Aggregate {
SUM, MIN, MAX
}
private List<String> params = new ArrayList<String>();
public ZParams weights(int... weights) {
params.add("WEIGHTS");
for (int weight : weights) {
params.add(String.valueOf(weight));
}
return this;
}
public Collection<String> getParams() {
return Collections.unmodifiableCollection(params);
}
public ZParams aggregate(Aggregate aggregate) {
params.add("AGGREGATE");
params.add(aggregate.name());
return this;
}
}