Expose *SCAN commands to BinaryJedis
* method signatures are a bit similar to Jedis's *SCAN ** but it takes parameters to byte[] instead of String * ScanParams : allow match pattern with byte[] * ScanResult : add method to get cursor with byte[] type * *SCAN for BinaryJedis unit tests included
This commit is contained in:
@@ -4,6 +4,7 @@ import static redis.clients.jedis.Protocol.toByteArray;
|
||||
|
||||
import java.io.Closeable;
|
||||
import java.net.URI;
|
||||
import java.util.AbstractMap;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
@@ -3417,4 +3418,71 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands,
|
||||
return client.getIntegerReply();
|
||||
}
|
||||
|
||||
public ScanResult<byte[]> scan(final byte[] cursor) {
|
||||
return scan(cursor, new ScanParams());
|
||||
}
|
||||
|
||||
public ScanResult<byte[]> scan(final byte[] cursor, final ScanParams params) {
|
||||
checkIsInMulti();
|
||||
client.scan(cursor, params);
|
||||
List<Object> result = client.getObjectMultiBulkReply();
|
||||
byte[] newcursor = (byte[]) result.get(0);
|
||||
List<byte[]> rawResults = (List<byte[]>) result.get(1);
|
||||
return new ScanResult<byte[]>(newcursor, rawResults);
|
||||
}
|
||||
|
||||
public ScanResult<Map.Entry<byte[], byte[]>> hscan(final byte[] key,
|
||||
final byte[] cursor) {
|
||||
return hscan(key, cursor, new ScanParams());
|
||||
}
|
||||
|
||||
public ScanResult<Map.Entry<byte[], byte[]>> hscan(final byte[] key,
|
||||
final byte[] cursor, final ScanParams params) {
|
||||
checkIsInMulti();
|
||||
client.hscan(key, cursor, params);
|
||||
List<Object> result = client.getObjectMultiBulkReply();
|
||||
byte[] newcursor = (byte[]) result.get(0);
|
||||
List<Map.Entry<byte[], byte[]>> results = new ArrayList<Map.Entry<byte[], byte[]>>();
|
||||
List<byte[]> rawResults = (List<byte[]>) result.get(1);
|
||||
Iterator<byte[]> iterator = rawResults.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
results.add(new AbstractMap.SimpleEntry<byte[], byte[]>(iterator.next(),
|
||||
iterator.next()));
|
||||
}
|
||||
return new ScanResult<Map.Entry<byte[], byte[]>>(newcursor, results);
|
||||
}
|
||||
|
||||
public ScanResult<byte[]> sscan(final byte[] key, final byte[] cursor) {
|
||||
return sscan(key, cursor, new ScanParams());
|
||||
}
|
||||
|
||||
public ScanResult<byte[]> sscan(final byte[] key, final byte[] cursor,
|
||||
final ScanParams params) {
|
||||
checkIsInMulti();
|
||||
client.sscan(key, cursor, params);
|
||||
List<Object> result = client.getObjectMultiBulkReply();
|
||||
byte[] newcursor = (byte[]) result.get(0);
|
||||
List<byte[]> rawResults = (List<byte[]>) result.get(1);
|
||||
return new ScanResult<byte[]>(newcursor, rawResults);
|
||||
}
|
||||
|
||||
public ScanResult<Tuple> zscan(final byte[] key, final byte[] cursor) {
|
||||
return zscan(key, cursor, new ScanParams());
|
||||
}
|
||||
|
||||
public ScanResult<Tuple> zscan(final byte[] key, final byte[] cursor,
|
||||
final ScanParams params) {
|
||||
checkIsInMulti();
|
||||
client.zscan(key, cursor, params);
|
||||
List<Object> result = client.getObjectMultiBulkReply();
|
||||
byte[] newcursor = (byte[]) result.get(0);
|
||||
List<Tuple> results = new ArrayList<Tuple>();
|
||||
List<byte[]> rawResults = (List<byte[]>) result.get(1);
|
||||
Iterator<byte[]> iterator = rawResults.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
results.add(new Tuple(iterator.next(), Double
|
||||
.valueOf(SafeEncoder.encode(iterator.next()))));
|
||||
}
|
||||
return new ScanResult<Tuple>(newcursor, results);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,13 @@ import redis.clients.util.SafeEncoder;
|
||||
public class ScanParams {
|
||||
private List<byte[]> params = new ArrayList<byte[]>();
|
||||
public final static String SCAN_POINTER_START = String.valueOf(0);
|
||||
public final static byte[] SCAN_POINTER_START_BINARY = SafeEncoder.encode(SCAN_POINTER_START);
|
||||
|
||||
public void match(final byte[] pattern) {
|
||||
params.add(MATCH.raw);
|
||||
params.add(pattern);
|
||||
}
|
||||
|
||||
public void match(final String pattern) {
|
||||
params.add(MATCH.raw);
|
||||
params.add(SafeEncoder.encode(pattern));
|
||||
|
||||
@@ -2,6 +2,8 @@ package redis.clients.jedis;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import redis.clients.util.SafeEncoder;
|
||||
|
||||
public class ScanResult<T> {
|
||||
private String cursor;
|
||||
private List<T> results;
|
||||
@@ -17,6 +19,11 @@ public class ScanResult<T> {
|
||||
this.results = results;
|
||||
}
|
||||
|
||||
public ScanResult(byte[] cursor, List<T> results) {
|
||||
this.cursor = SafeEncoder.encode(cursor);
|
||||
this.results = results;
|
||||
}
|
||||
|
||||
public ScanResult(String cursor, List<T> results) {
|
||||
this.cursor = cursor;
|
||||
this.results = results;
|
||||
@@ -40,6 +47,10 @@ public class ScanResult<T> {
|
||||
return cursor;
|
||||
}
|
||||
|
||||
public byte[] getBinaryCursor() {
|
||||
return SafeEncoder.encode(cursor);
|
||||
}
|
||||
|
||||
public List<T> getResult() {
|
||||
return results;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user