Implemented ZUNIONSTORE and ZINTERSTORE
This commit is contained in:
@@ -4,13 +4,10 @@ Jedis is a blazingly small and sane redis java client.
|
|||||||
|
|
||||||
Jedis was conceived to be EASY to use and FULLY COMPATIBLE with the latest version of redis.
|
Jedis was conceived to be EASY to use and FULLY COMPATIBLE with the latest version of redis.
|
||||||
|
|
||||||
Jedis is a WORK IN PROGRESS.
|
|
||||||
|
|
||||||
## What's still missing?
|
## What's still missing?
|
||||||
- Sharding
|
- Sharding
|
||||||
- Persistence control commands
|
- Persistence control commands
|
||||||
- Remote server control commands
|
- Remote server control commands
|
||||||
- The ZUNIONSTORE, ZINTERSTORE commands
|
|
||||||
|
|
||||||
But stay close because things are going fast and all this will be implemented soon!
|
But stay close because things are going fast and all this will be implemented soon!
|
||||||
|
|
||||||
@@ -22,7 +19,7 @@ But stay close because things are going fast and all this will be implemented so
|
|||||||
- Commands operating on hashes
|
- Commands operating on hashes
|
||||||
- Commands operating on lists
|
- Commands operating on lists
|
||||||
- Commands operating on sets
|
- Commands operating on sets
|
||||||
- Commands operating on sorted sets (not ZUNIONSTORE, ZINTERSTORE)
|
- Commands operating on sorted sets
|
||||||
- Transactions
|
- Transactions
|
||||||
- Pipelining
|
- Pipelining
|
||||||
- Publish/Subscribe
|
- Publish/Subscribe
|
||||||
|
|||||||
@@ -473,4 +473,42 @@ public class Client extends Connection {
|
|||||||
sendCommand("ZREMRANGEBYSCORE", key, String.valueOf(start), String
|
sendCommand("ZREMRANGEBYSCORE", key, String.valueOf(start), String
|
||||||
.valueOf(end));
|
.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()]));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -582,4 +582,24 @@ public class Jedis {
|
|||||||
client.zremrangeByScore(key, start, end);
|
client.zremrangeByScore(key, start, end);
|
||||||
return client.getIntegerReply();
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
33
src/main/java/redis/clients/jedis/ZParams.java
Normal file
33
src/main/java/redis/clients/jedis/ZParams.java
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,6 +6,7 @@ import java.util.Set;
|
|||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import redis.clients.jedis.Tuple;
|
import redis.clients.jedis.Tuple;
|
||||||
|
import redis.clients.jedis.ZParams;
|
||||||
|
|
||||||
public class SortedSetCommandsTest extends JedisCommandTestBase {
|
public class SortedSetCommandsTest extends JedisCommandTestBase {
|
||||||
@Test
|
@Test
|
||||||
@@ -287,4 +288,78 @@ public class SortedSetCommandsTest extends JedisCommandTestBase {
|
|||||||
|
|
||||||
assertEquals(expected, jedis.zrange("foo", 0, 100));
|
assertEquals(expected, jedis.zrange("foo", 0, 100));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void zunionstore() {
|
||||||
|
jedis.zadd("foo", 1, "a");
|
||||||
|
jedis.zadd("foo", 2, "b");
|
||||||
|
jedis.zadd("bar", 2, "a");
|
||||||
|
jedis.zadd("bar", 2, "b");
|
||||||
|
|
||||||
|
int result = jedis.zunionstore("dst", "foo", "bar");
|
||||||
|
|
||||||
|
assertEquals(2, result);
|
||||||
|
|
||||||
|
Set<Tuple> expected = new LinkedHashSet<Tuple>();
|
||||||
|
expected.add(new Tuple("b", 4));
|
||||||
|
expected.add(new Tuple("a", 3));
|
||||||
|
|
||||||
|
assertEquals(expected, jedis.zrangeWithScores("dst", 0, 100));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void zunionstoreParams() {
|
||||||
|
jedis.zadd("foo", 1, "a");
|
||||||
|
jedis.zadd("foo", 2, "b");
|
||||||
|
jedis.zadd("bar", 2, "a");
|
||||||
|
jedis.zadd("bar", 2, "b");
|
||||||
|
|
||||||
|
ZParams params = new ZParams();
|
||||||
|
params.weights(2, 2);
|
||||||
|
params.aggregate(ZParams.Aggregate.SUM);
|
||||||
|
int result = jedis.zunionstore("dst", params, "foo", "bar");
|
||||||
|
|
||||||
|
assertEquals(2, result);
|
||||||
|
|
||||||
|
Set<Tuple> expected = new LinkedHashSet<Tuple>();
|
||||||
|
expected.add(new Tuple("b", 8));
|
||||||
|
expected.add(new Tuple("a", 6));
|
||||||
|
|
||||||
|
assertEquals(expected, jedis.zrangeWithScores("dst", 0, 100));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void zinterstore() {
|
||||||
|
jedis.zadd("foo", 1, "a");
|
||||||
|
jedis.zadd("foo", 2, "b");
|
||||||
|
jedis.zadd("bar", 2, "a");
|
||||||
|
|
||||||
|
int result = jedis.zinterstore("dst", "foo", "bar");
|
||||||
|
|
||||||
|
assertEquals(1, result);
|
||||||
|
|
||||||
|
Set<Tuple> expected = new LinkedHashSet<Tuple>();
|
||||||
|
expected.add(new Tuple("a", 3));
|
||||||
|
|
||||||
|
assertEquals(expected, jedis.zrangeWithScores("dst", 0, 100));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void zintertoreParams() {
|
||||||
|
jedis.zadd("foo", 1, "a");
|
||||||
|
jedis.zadd("foo", 2, "b");
|
||||||
|
jedis.zadd("bar", 2, "a");
|
||||||
|
|
||||||
|
ZParams params = new ZParams();
|
||||||
|
params.weights(2, 2);
|
||||||
|
params.aggregate(ZParams.Aggregate.SUM);
|
||||||
|
int result = jedis.zinterstore("dst", params, "foo", "bar");
|
||||||
|
|
||||||
|
assertEquals(1, result);
|
||||||
|
|
||||||
|
Set<Tuple> expected = new LinkedHashSet<Tuple>();
|
||||||
|
expected.add(new Tuple("a", 6));
|
||||||
|
|
||||||
|
assertEquals(expected, jedis.zrangeWithScores("dst", 0, 100));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user