Merge branch 'scriptsupport' of git://github.com/ivowiblo/jedis into ivowiblo-scriptsupport

This commit is contained in:
Jonathan Leibiusky
2012-04-18 18:10:45 -03:00
9 changed files with 365 additions and 5 deletions

View File

@@ -1,5 +1,7 @@
package redis.clients.jedis;
import static redis.clients.jedis.Protocol.Command.SCRIPT;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
@@ -9,10 +11,12 @@ import java.util.Map;
import java.util.Set;
import redis.clients.jedis.BinaryClient.LIST_POSITION;
import redis.clients.jedis.Protocol.Keyword;
import redis.clients.jedis.exceptions.JedisDataException;
import redis.clients.jedis.exceptions.JedisException;
import redis.clients.util.JedisByteHashMap;
import redis.clients.util.SafeEncoder;
import static redis.clients.jedis.Protocol.toByteArray;
public class BinaryJedis implements BinaryJedisCommands {
protected Client client = null;
@@ -1660,7 +1664,7 @@ public class BinaryJedis implements BinaryJedisCommands {
public void disconnect() {
client.disconnect();
}
public String watch(final byte[]... keys) {
client.watch(keys);
return client.getStatusCodeReply();
@@ -3006,4 +3010,53 @@ public class BinaryJedis implements BinaryJedisCommands {
public Long getDB() {
return client.getDB();
}
/**
* Evaluates scripts using the Lua interpreter built into Redis starting from version 2.6.0.
* <p>
*
* @return Script result
*/
public Object eval(byte[] script, List<byte[]> keys, List<byte[]> args) {
client.setTimeoutInfinite();
client.eval(script, toByteArray(keys.size()), getParams(keys, args));
return client.getOne();
}
private byte[][] getParams(List<byte[]> keys, List<byte[]> args){
int keyCount = keys.size();
byte[][] params = new byte[keyCount + args.size()][];
for(int i=0;i<keyCount;i++)
params[i] = keys.get(i);
for(int i=0;i<keys.size();i++)
params[keyCount + i] = args.get(i);
return params;
}
public Object eval(byte[] script, byte[] keyCount, byte[][] params) {
client.setTimeoutInfinite();
client.eval(script, keyCount, params);
return client.getOne();
}
public byte[] scriptFlush(){
client.scriptFlush();
return client.getBinaryBulkReply();
}
public List<Long> scriptExists(byte[]... sha1){
client.scriptExists(sha1);
return client.getIntegerMultiBulkReply();
}
public byte[] scriptLoad(byte[] script){
client.scriptLoad(script);
return client.getBinaryBulkReply();
}
public byte[] scriptKill(){
client.scriptKill();
return client.getBinaryBulkReply();
}
}