Eval and Evalsha api improved
This commit is contained in:
@@ -719,30 +719,25 @@ public class BinaryClient extends Connection {
|
||||
super.disconnect();
|
||||
}
|
||||
|
||||
private void sendEvalCommand(Command command, byte[] script, List<byte[]> keys, List<byte[]> args){
|
||||
int keysSize = keys.size();
|
||||
int argsSize = args.size();
|
||||
private void sendEvalCommand(Command command, byte[] script, byte[] keyCount, byte[][] params){
|
||||
|
||||
final byte[][] allArgs = new byte[keysSize + argsSize + 2][];
|
||||
final byte[][] allArgs = new byte[params.length + 2][];
|
||||
|
||||
allArgs[0] = script;
|
||||
allArgs[1] =toByteArray(keysSize);
|
||||
allArgs[1] = keyCount;
|
||||
|
||||
for(int i=0;i<keysSize; i++)
|
||||
allArgs[i+2] = keys.get(i);
|
||||
|
||||
for(int i=0;i<argsSize; i++)
|
||||
allArgs[i+2+keysSize] = args.get(i);
|
||||
for(int i=0;i<params.length; i++)
|
||||
allArgs[i+2] = params[i];
|
||||
|
||||
sendCommand(command, allArgs );
|
||||
}
|
||||
|
||||
public void eval(byte[] script, List<byte[]> keys, List<byte[]> args){
|
||||
sendEvalCommand(EVAL, script, keys, args );
|
||||
public void eval(byte[] script, byte[] keyCount, byte[][] params){
|
||||
sendEvalCommand(EVAL, script, keyCount, params );
|
||||
}
|
||||
|
||||
public void evalsha(byte[] sha1, List<byte[]> keys, List<byte[]> args){
|
||||
sendEvalCommand(EVALSHA, sha1, keys, args);
|
||||
public void evalsha(byte[] sha1, byte[] keyCount, byte[][] params){
|
||||
sendEvalCommand(EVALSHA, sha1, keyCount, params);
|
||||
}
|
||||
|
||||
public void scriptFlush(){
|
||||
|
||||
@@ -16,6 +16,7 @@ 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;
|
||||
@@ -3018,18 +3019,25 @@ public class BinaryJedis implements BinaryJedisCommands {
|
||||
*/
|
||||
public Object eval(byte[] script, List<byte[]> keys, List<byte[]> args) {
|
||||
client.setTimeoutInfinite();
|
||||
client.eval(script, keys, args);
|
||||
client.eval(script, toByteArray(keys.size()), getParams(keys, args));
|
||||
return client.getOne();
|
||||
}
|
||||
|
||||
/**
|
||||
* 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) {
|
||||
return eval(script,keys, new ArrayList<byte[]>());
|
||||
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(){
|
||||
|
||||
@@ -600,28 +600,20 @@ public class Client extends BinaryClient implements Commands {
|
||||
configGet(SafeEncoder.encode(pattern));
|
||||
}
|
||||
|
||||
public void eval(String script, List<String> keys, String... args) {
|
||||
List<byte[]> k = new ArrayList<byte[]>();
|
||||
for(String key:keys){
|
||||
k.add(SafeEncoder.encode(key));
|
||||
}
|
||||
List<byte[]> a = new ArrayList<byte[]>();
|
||||
for(String arg:args){
|
||||
a.add(SafeEncoder.encode(arg));
|
||||
}
|
||||
eval(SafeEncoder.encode(script),k,a);
|
||||
private byte[][] getByteParams(String... params){
|
||||
byte[][] p = new byte[params.length][];
|
||||
for(int i=0;i<params.length;i++)
|
||||
p[i] = SafeEncoder.encode(params[i]);
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
public void eval(String script, int keyCount, String... params) {
|
||||
eval(SafeEncoder.encode(script),toByteArray(keyCount), getByteParams(params));
|
||||
}
|
||||
|
||||
public void evalsha(String sha1, List<String> keys, String... args) {
|
||||
List<byte[]> k = new ArrayList<byte[]>();
|
||||
for(String key:keys){
|
||||
k.add(SafeEncoder.encode(key));
|
||||
}
|
||||
List<byte[]> a = new ArrayList<byte[]>();
|
||||
for(String arg:args){
|
||||
a.add(SafeEncoder.encode(arg));
|
||||
}
|
||||
evalsha(SafeEncoder.encode(sha1),k,a);
|
||||
|
||||
public void evalsha(String sha1, int keyCount, String... params) {
|
||||
evalsha(SafeEncoder.encode(sha1),toByteArray(keyCount), getByteParams(params));
|
||||
}
|
||||
|
||||
public void scriptExists(String... sha1){
|
||||
|
||||
@@ -2693,19 +2693,38 @@ public class Jedis extends BinaryJedis implements JedisCommands {
|
||||
return client.getStatusCodeReply();
|
||||
}
|
||||
|
||||
public Object eval(String script, String... keys) {
|
||||
List<String> s = new ArrayList<String>(keys.length);
|
||||
for(String key : keys)
|
||||
s.add(key);
|
||||
|
||||
return eval(script, s);
|
||||
}
|
||||
|
||||
public Object eval(String script, List<String> keys, String... args) {
|
||||
client.setTimeoutInfinite();
|
||||
client.eval(script, keys, args);
|
||||
public Object eval(String script, int keyCount, String... params) {
|
||||
client.setTimeoutInfinite();
|
||||
client.eval(script, keyCount, params);
|
||||
|
||||
return getEvalResult();
|
||||
}
|
||||
|
||||
private String[] getParams(List<String> keys, List<String> args){
|
||||
int keyCount = keys.size();
|
||||
int argCount = args.size();
|
||||
|
||||
String[] params = new String[keyCount + args.size()];
|
||||
|
||||
for(int i=0;i<keyCount;i++)
|
||||
params[i] = keys.get(i);
|
||||
|
||||
for(int i=0;i<argCount;i++)
|
||||
params[keyCount + i] = args.get(i);
|
||||
|
||||
return params;
|
||||
}
|
||||
|
||||
public Object eval(String script, List<String> keys, List<String> args) {
|
||||
return eval(script, keys.size(), getParams(keys, args));
|
||||
}
|
||||
|
||||
public Object eval(String script) {
|
||||
return eval(script,0);
|
||||
}
|
||||
|
||||
public Object evalsha(String script) {
|
||||
return evalsha(script,0);
|
||||
}
|
||||
|
||||
private Object getEvalResult(){
|
||||
@@ -2726,17 +2745,13 @@ public class Jedis extends BinaryJedis implements JedisCommands {
|
||||
return result;
|
||||
}
|
||||
|
||||
public Object evalsha(String sha1, String... keys) {
|
||||
List<String> s = new ArrayList<String>(keys.length);
|
||||
for(String key : keys)
|
||||
s.add(key);
|
||||
|
||||
return evalsha(sha1, s);
|
||||
public Object evalsha(String sha1, List<String> keys, List<String> args) {
|
||||
return evalsha(sha1, keys.size(), getParams(keys, args));
|
||||
}
|
||||
|
||||
public Object evalsha(String sha1, List<String> keys, String... args) {
|
||||
public Object evalsha(String sha1, int keyCount, String... params) {
|
||||
checkIsInMulti();
|
||||
client.evalsha(sha1, keys, args);
|
||||
client.evalsha(sha1, keyCount, params);
|
||||
|
||||
return getEvalResult();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user