Merge pull request #515 from xetorthio/zadd_scoremembers

Change zadd parameter order to allow duplicated scoremembers but not members
This commit is contained in:
Jonathan Leibiusky
2014-01-26 09:19:16 -08:00
12 changed files with 66 additions and 63 deletions

View File

@@ -377,15 +377,14 @@ public class BinaryClient extends Connection {
sendCommand(ZADD, key, toByteArray(score), member); sendCommand(ZADD, key, toByteArray(score), member);
} }
public void zaddBinary(final byte[] key, Map<Double, byte[]> scoreMembers) { public void zaddBinary(final byte[] key, final Map< byte[], Double> scoreMembers) {
ArrayList<byte[]> args = new ArrayList<byte[]>(
scoreMembers.size() * 2 + 1);
ArrayList<byte[]> args = new ArrayList<byte[]>(scoreMembers.size() * 2 + 1);
args.add(key); args.add(key);
for (Map.Entry<Double, byte[]> entry : scoreMembers.entrySet()) { for (Map.Entry<byte[],Double > entry : scoreMembers.entrySet()) {
args.add(toByteArray(entry.getKey())); args.add(toByteArray(entry.getValue()));
args.add(entry.getValue()); args.add(entry.getKey());
} }
byte[][] argsArray = new byte[args.size()][]; byte[][] argsArray = new byte[args.size()][];

View File

@@ -1502,7 +1502,7 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey
return client.getIntegerReply(); return client.getIntegerReply();
} }
public Long zadd(final byte[] key, final Map<Double, byte[]> scoreMembers) { public Long zadd(final byte[] key, final Map<byte[], Double> scoreMembers) {
checkIsInMulti(); checkIsInMulti();
client.zaddBinary(key, scoreMembers); client.zaddBinary(key, scoreMembers);
return client.getIntegerReply(); return client.getIntegerReply();

View File

@@ -5,6 +5,8 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import redis.clients.jedis.BinaryClient.LIST_POSITION;
/** /**
* Common interface for sharded and non-sharded BinaryJedis * Common interface for sharded and non-sharded BinaryJedis
*/ */
@@ -115,7 +117,7 @@ public interface BinaryJedisCommands {
Long zadd(byte[] key, double score, byte[] member); Long zadd(byte[] key, double score, byte[] member);
Long zadd(byte[] key, Map<Double, byte[]> scoreMembers); Long zadd(byte[] key, Map<byte[], Double> scoreMembers);
Set<byte[]> zrange(byte[] key, long start, long end); Set<byte[]> zrange(byte[] key, long start, long end);

View File

@@ -295,7 +295,7 @@ public class BinaryShardedJedis extends Sharded<Jedis, JedisShardInfo>
return j.zadd(key, score, member); return j.zadd(key, score, member);
} }
public Long zadd(byte[] key, Map<Double, byte[]> scoreMembers) { public Long zadd(byte[] key, Map<byte[], Double> scoreMembers) {
Jedis j = getShard(key); Jedis j = getShard(key);
return j.zadd(key, scoreMembers); return j.zadd(key, scoreMembers);
} }

View File

@@ -710,17 +710,19 @@ public class Client extends BinaryClient implements Commands {
scriptLoad(SafeEncoder.encode(script)); scriptLoad(SafeEncoder.encode(script));
} }
public void zadd(String key, Map<Double, String> scoreMembers) { public void zadd(String key, Map<String, Double> scoreMembers) {
HashMap<Double, byte[]> binaryScoreMembers = new HashMap<Double, byte[]>();
for (Map.Entry<Double, String> entry : scoreMembers.entrySet()) { HashMap<byte[], Double> binaryScoreMembers = new HashMap<byte[], Double>();
binaryScoreMembers.put(entry.getKey(),
SafeEncoder.encode(entry.getValue())); for (Map.Entry<String, Double> entry : scoreMembers.entrySet()) {
binaryScoreMembers.put(SafeEncoder.encode(entry.getKey()), entry.getValue());
} }
zaddBinary(SafeEncoder.encode(key), binaryScoreMembers); zaddBinary(SafeEncoder.encode(key), binaryScoreMembers);
} }
public void objectRefcount(String key) { public void objectRefcount(String key) {
objectRefcount(SafeEncoder.encode(key)); objectRefcount(SafeEncoder.encode(key));
} }

View File

@@ -144,7 +144,7 @@ public interface Commands {
public void zadd(final String key, final double score, final String member); public void zadd(final String key, final double score, final String member);
public void zadd(final String key, final Map<Double, String> scoreMembers); public void zadd(final String key, final Map<String, Double > scoreMembers);
public void zrange(final String key, final long start, final long end); public void zrange(final String key, final long start, final long end);

View File

@@ -1415,7 +1415,7 @@ public class Jedis extends BinaryJedis implements JedisCommands, MultiKeyCommand
return client.getIntegerReply(); return client.getIntegerReply();
} }
public Long zadd(final String key, final Map<Double, String> scoreMembers) { public Long zadd(final String key, final Map<String, Double> scoreMembers) {
checkIsInMulti(); checkIsInMulti();
client.zadd(key, scoreMembers); client.zadd(key, scoreMembers);
return client.getIntegerReply(); return client.getIntegerReply();

View File

@@ -635,7 +635,7 @@ public class JedisCluster implements JedisCommands, BasicCommands {
} }
@Override @Override
public Long zadd(final String key, final Map<Double, String> scoreMembers) { public Long zadd(final String key, final Map<String, Double> scoreMembers) {
return new JedisClusterCommand<Long>(connectionHandler, timeout, return new JedisClusterCommand<Long>(connectionHandler, timeout,
maxRedirections) { maxRedirections) {
@Override @Override

View File

@@ -115,7 +115,7 @@ public interface
Long zadd(String key, double score, String member); Long zadd(String key, double score, String member);
Long zadd(String key, Map<Double, String> scoreMembers); Long zadd(String key, Map<String, Double > scoreMembers);
Set<String> zrange(String key, long start, long end); Set<String> zrange(String key, long start, long end);

View File

@@ -654,7 +654,7 @@ abstract class PipelineBase extends Queable implements
return getResponse(BuilderFactory.LONG); return getResponse(BuilderFactory.LONG);
} }
public Response<Long> zadd(String key, Map<Double, String> scoreMembers) { public Response<Long> zadd(String key, Map<String, Double> scoreMembers) {
getClient(key).zadd(key, scoreMembers); getClient(key).zadd(key, scoreMembers);
return getResponse(BuilderFactory.LONG); return getResponse(BuilderFactory.LONG);
} }

View File

@@ -327,7 +327,7 @@ public class ShardedJedis extends BinaryShardedJedis implements JedisCommands {
return j.zadd(key, score, member); return j.zadd(key, score, member);
} }
public Long zadd(String key, Map<Double, String> scoreMembers) { public Long zadd(String key, Map<String, Double> scoreMembers) {
Jedis j = getShard(key); Jedis j = getShard(key);
return j.zadd(key, scoreMembers); return j.zadd(key, scoreMembers);
} }

View File

@@ -117,30 +117,30 @@ public class VariadicCommandsTest extends JedisCommandTestBase {
@Test @Test
public void zadd() { public void zadd() {
Map<Double, String> scoreMembers = new HashMap<Double, String>(); Map<String, Double> scoreMembers = new HashMap<String, Double>();
scoreMembers.put(1d, "bar"); scoreMembers.put("bar", 1d);
scoreMembers.put(10d, "foo"); scoreMembers.put("foo", 10d);
long status = jedis.zadd("foo", scoreMembers); long status = jedis.zadd("foo", scoreMembers);
assertEquals(2, status); assertEquals(2, status);
scoreMembers.clear(); scoreMembers.clear();
scoreMembers.put(0.1d, "car"); scoreMembers.put("car", 0.1d);
scoreMembers.put(2d, "bar"); scoreMembers.put("bar", 2d);
status = jedis.zadd("foo", scoreMembers); status = jedis.zadd("foo", scoreMembers);
assertEquals(1, status); assertEquals(1, status);
Map<Double, byte[]> bscoreMembers = new HashMap<Double, byte[]>(); Map<byte[], Double> bscoreMembers = new HashMap<byte[], Double>();
bscoreMembers.put(1d, bbar); bscoreMembers.put(bbar, 1d);
bscoreMembers.put(10d, bfoo); bscoreMembers.put(bfoo, 10d);
status = jedis.zadd(bfoo, bscoreMembers); status = jedis.zadd(bfoo, bscoreMembers);
assertEquals(2, status); assertEquals(2, status);
bscoreMembers.clear(); bscoreMembers.clear();
bscoreMembers.put(0.1d, bcar); bscoreMembers.put(bcar, 0.1d);
bscoreMembers.put(2d, bbar); bscoreMembers.put(bbar, 2d);
status = jedis.zadd(bfoo, bscoreMembers); status = jedis.zadd(bfoo, bscoreMembers);
assertEquals(1, status); assertEquals(1, status);