Merge pull request #126 from mathieucarbou/issue-125

Implement getBuckets(String pattern) #125
pull/133/head
Nikita Koksharov 10 years ago
commit 629a0adb3c

@ -16,17 +16,14 @@
package org.redisson;
import com.lambdaworks.redis.RedisAsyncConnection;
import io.netty.util.concurrent.Future;
import org.redisson.async.ResultOperation;
import org.redisson.connection.ClusterConnectionManager;
import org.redisson.connection.ConnectionManager;
import org.redisson.connection.MasterSlaveConnectionManager;
import org.redisson.connection.SentinelConnectionManager;
import org.redisson.connection.SingleConnectionManager;
import org.redisson.connection.*;
import org.redisson.core.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.UUID;
/**
@ -94,6 +91,30 @@ public class Redisson implements RedissonClient {
return new RedissonBucket<V>(connectionManager, name);
}
/**
* Returns a list of object holder by a key pattern
*/
@Override
public <V> List<RBucket<V>> getBuckets(final String pattern) {
List<Object> keys = connectionManager.get(connectionManager.readAsync(new ResultOperation<List<Object>, V>() {
@Override
public Future<List<Object>> execute(RedisAsyncConnection<Object, V> async) {
return async.keys(pattern);
}
}));
if (keys == null) {
return Collections.emptyList();
}
List<RBucket<V>> buckets = new ArrayList<RBucket<V>>(keys.size());
for (Object key : keys) {
if(key != null) {
buckets.add(this.<V>getBucket(key.toString()));
}
}
return buckets;
}
/**
* Returns HyperLogLog object
*

@ -17,6 +17,8 @@ package org.redisson;
import org.redisson.core.*;
import java.util.List;
public interface RedissonClient {
/**
@ -27,6 +29,11 @@ public interface RedissonClient {
*/
<V> RBucket<V> getBucket(String name);
/**
* Returns a list of object holder by a key pattern
*/
<V> List<RBucket<V>> getBuckets(String pattern);
/**
* Returns HyperLogLog object
*

@ -94,7 +94,7 @@ public class JsonJacksonCodec implements RedissonCodec {
@Override
public Object decodeKey(ByteBuffer bytes) {
return new String(bytes.array(), Charset.forName("ASCII"));
return new String(bytes.array(), bytes.arrayOffset() + bytes.position(), bytes.limit(), Charset.forName("ASCII"));
}
@Override

@ -4,6 +4,10 @@ import org.junit.Assert;
import org.junit.Test;
import org.redisson.core.RBucket;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
public class RedissonBucketTest extends BaseTest {
@Test
@ -52,4 +56,20 @@ public class RedissonBucketTest extends BaseTest {
Assert.assertFalse(bucket.exists());
}
@Test
public void testGetPattern() {
Collection<String> names = Arrays.asList("test:testGetPattern:one", "test:testGetPattern:two");
Collection<String> vals = Arrays.asList("one-val", "two-val");
redisson.getBucket("test:testGetPattern:one").set("one-val");
redisson.getBucket("test:testGetPattern:two").set("two-val");
List<RBucket<String>> buckets = redisson.getBuckets("test:testGetPattern:*");
Assert.assertEquals(2, buckets.size());
Assert.assertTrue(names.contains(buckets.get(0).getName()));
Assert.assertTrue(names.contains(buckets.get(1).getName()));
Assert.assertTrue(vals.contains(buckets.get(0).get()));
Assert.assertTrue(vals.contains(buckets.get(1).get()));
for (RBucket<String> bucket : buckets) {
bucket.delete();
}
}
}

Loading…
Cancel
Save