diff --git a/src/main/java/org/redisson/RedissonList.java b/src/main/java/org/redisson/RedissonList.java index 446db018d..c11ed40d3 100644 --- a/src/main/java/org/redisson/RedissonList.java +++ b/src/main/java/org/redisson/RedissonList.java @@ -16,6 +16,7 @@ package org.redisson; import io.netty.util.concurrent.Future; +import io.netty.util.concurrent.Promise; import java.util.ArrayList; import java.util.Collection; @@ -25,6 +26,7 @@ import java.util.List; import java.util.ListIterator; import java.util.NoSuchElementException; +import org.redisson.async.AsyncOperation; import org.redisson.async.ResultOperation; import org.redisson.async.SyncOperation; import org.redisson.connection.ConnectionManager; @@ -99,6 +101,11 @@ public class RedissonList extends RedissonExpirable implements RList { public boolean add(V e) { return addAll(Collections.singleton(e)); } + + @Override + public Future addAsync(V e) { + return addAllAsync(Collections.singleton(e)); + } @Override public boolean remove(Object o) { @@ -143,17 +150,22 @@ public class RedissonList extends RedissonExpirable implements RList { } @Override - public boolean addAll(final Collection c) { + public boolean addAll(Collection c) { if (c.isEmpty()) { return false; } - connectionManager.write(getName(), new ResultOperation() { + return connectionManager.get(addAllAsync(c)); + } + + @Override + public Future addAllAsync(final Collection c) { + return connectionManager.writeAsync(getName(), new AsyncOperation() { @Override - protected Future execute(RedisAsyncConnection async) { - return async.rpush(getName(), c.toArray()); + public void execute(Promise promise, RedisAsyncConnection async) { + async.rpush((Object)getName(), c.toArray()); + promise.setSuccess(true); } }); - return true; } @Override diff --git a/src/main/java/org/redisson/core/RList.java b/src/main/java/org/redisson/core/RList.java index a8a332633..aadef7957 100644 --- a/src/main/java/org/redisson/core/RList.java +++ b/src/main/java/org/redisson/core/RList.java @@ -15,6 +15,9 @@ */ package org.redisson.core; +import io.netty.util.concurrent.Future; + +import java.util.Collection; import java.util.List; /** @@ -26,4 +29,8 @@ import java.util.List; */ public interface RList extends List, RExpirable { + Future addAsync(V e); + + Future addAllAsync(Collection c); + } diff --git a/src/test/java/org/redisson/RedissonListTest.java b/src/test/java/org/redisson/RedissonListTest.java index 56919f137..7bef9f096 100644 --- a/src/test/java/org/redisson/RedissonListTest.java +++ b/src/test/java/org/redisson/RedissonListTest.java @@ -1,5 +1,8 @@ package org.redisson; +import io.netty.util.concurrent.Future; +import io.netty.util.concurrent.FutureListener; + import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; @@ -10,9 +13,36 @@ import java.util.ListIterator; import org.hamcrest.Matchers; import org.junit.Assert; import org.junit.Test; +import org.redisson.core.RList; public class RedissonListTest extends BaseTest { + @Test + public void testAddAllAsync() { + final RList list = redisson.getList("list"); + list.addAllAsync(Arrays.asList(1L, 2L, 3L)).addListener(new FutureListener() { + @Override + public void operationComplete(Future future) throws Exception { + list.addAllAsync(Arrays.asList(1L, 24L, 3L)); + } + }); + + Assert.assertThat(list, Matchers.contains(1L, 2L, 3L, 1L, 24L, 3L)); + } + + @Test + public void testAddAsync() { + final RList list = redisson.getList("list"); + list.addAsync(1L).addListener(new FutureListener() { + @Override + public void operationComplete(Future future) throws Exception { + list.addAsync(2L); + } + }); + + Assert.assertThat(list, Matchers.contains(1L, 2L)); + } + @Test public void testLong() { List list = redisson.getList("list");