diff --git a/src/main/java/com/lambdaworks/redis/RedisAsyncConnection.java b/src/main/java/com/lambdaworks/redis/RedisAsyncConnection.java index 596066a0a..c6b3c0f98 100644 --- a/src/main/java/com/lambdaworks/redis/RedisAsyncConnection.java +++ b/src/main/java/com/lambdaworks/redis/RedisAsyncConnection.java @@ -76,6 +76,7 @@ import com.lambdaworks.redis.output.StringListOutput; import com.lambdaworks.redis.output.ValueListOutput; import com.lambdaworks.redis.output.ValueOutput; import com.lambdaworks.redis.output.ValueSetOutput; +import com.lambdaworks.redis.output.ValueSetScanOutput; import com.lambdaworks.redis.protocol.Command; import com.lambdaworks.redis.protocol.CommandArgs; import com.lambdaworks.redis.protocol.CommandKeyword; @@ -626,7 +627,7 @@ public class RedisAsyncConnection extends ChannelInboundHandlerAdapter { } public Future sadd(K key, V... members) { - CommandArgs args = new CommandArgs(codec).addKey(key).addValues(members); + CommandArgs args = new CommandArgs(codec).addKey(key).addMapValues(members); return dispatch(SADD, new IntegerOutput(codec), args); } @@ -1058,7 +1059,7 @@ public class RedisAsyncConnection extends ChannelInboundHandlerAdapter { public Future> sscan(K key, long startValue) { CommandArgs args = new CommandArgs(codec).addKey(key).add(startValue); - return dispatch(SSCAN, new ListScanOutput(codec), args); + return dispatch(SSCAN, new ValueSetScanOutput(codec), args); } public Future> hscan(K key, long startValue) { diff --git a/src/main/java/com/lambdaworks/redis/output/ValueSetScanOutput.java b/src/main/java/com/lambdaworks/redis/output/ValueSetScanOutput.java new file mode 100644 index 000000000..1a8f549ce --- /dev/null +++ b/src/main/java/com/lambdaworks/redis/output/ValueSetScanOutput.java @@ -0,0 +1,23 @@ +package com.lambdaworks.redis.output; + +import java.nio.ByteBuffer; + +import com.lambdaworks.redis.codec.RedisCodec; +import com.lambdaworks.redis.protocol.CommandOutput; + +public class ValueSetScanOutput extends CommandOutput> { + + public ValueSetScanOutput(RedisCodec codec) { + super(codec, new ListScanResult()); + } + + @Override + public void set(ByteBuffer bytes) { + if (output.getPos() == null) { + output.setPos(((Number) codec.decodeMapValue(bytes)).longValue()); + } else { + output.addValue(codec.decodeMapValue(bytes)); + } + } + +} diff --git a/src/test/java/org/redisson/RedissonSetTest.java b/src/test/java/org/redisson/RedissonSetTest.java index c0d0748b4..4bf0f0534 100644 --- a/src/test/java/org/redisson/RedissonSetTest.java +++ b/src/test/java/org/redisson/RedissonSetTest.java @@ -43,6 +43,24 @@ public class RedissonSetTest extends BaseTest { Assert.assertEquals(sb.getLng(), set.iterator().next().getLng()); } + @Test + public void testAddLong() throws InterruptedException, ExecutionException { + Long sb = 1l; + + RSet set = redisson.getSet("simple_longs"); + set.add(sb); + + for (Long l : set) { + Assert.assertEquals(sb.getClass(), l.getClass()); + } + + Object[] arr = set.toArray(); + + for (Object o : arr) { + Assert.assertEquals(sb.getClass(), o.getClass()); + } + } + @Test public void testAddAsync() throws InterruptedException, ExecutionException { RSet set = redisson.getSet("simple");