From df75c72825b74a85ec381bbbaeac24708c8994c7 Mon Sep 17 00:00:00 2001 From: ivowiblo Date: Sat, 14 Apr 2012 22:54:43 -0300 Subject: [PATCH] Eval and Evalsha api improved --- .DS_Store | Bin 0 -> 6148 bytes src/.DS_Store | Bin 0 -> 6148 bytes .../redis/clients/jedis/BinaryClient.java | 23 +++----- .../java/redis/clients/jedis/BinaryJedis.java | 28 +++++---- src/main/java/redis/clients/jedis/Client.java | 34 +++++------ src/main/java/redis/clients/jedis/Jedis.java | 53 +++++++++++------- src/test/.DS_Store | Bin 0 -> 6148 bytes src/test/java/.DS_Store | Bin 0 -> 6148 bytes src/test/java/redis/.DS_Store | Bin 0 -> 6148 bytes src/test/java/redis/clients/.DS_Store | Bin 0 -> 6148 bytes src/test/java/redis/clients/jedis/.DS_Store | Bin 0 -> 6148 bytes .../java/redis/clients/jedis/tests/.DS_Store | Bin 0 -> 6148 bytes .../tests/commands/ScriptingCommandsTest.java | 18 ++++-- 13 files changed, 87 insertions(+), 69 deletions(-) create mode 100644 .DS_Store create mode 100644 src/.DS_Store create mode 100644 src/test/.DS_Store create mode 100644 src/test/java/.DS_Store create mode 100644 src/test/java/redis/.DS_Store create mode 100644 src/test/java/redis/clients/.DS_Store create mode 100644 src/test/java/redis/clients/jedis/.DS_Store create mode 100644 src/test/java/redis/clients/jedis/tests/.DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..9a874b5768f336915163bb88cd434575b859f936 GIT binary patch literal 6148 zcmeH~Jr2S!425ml0g0s}V-^m;4I%_5-~tF3k&vj^b9A16778<}(6eNJu~Vz<8=6`~ zboab&MFtUB!i}=AFfm2m$tVxGT*u4pe81nUlA49C} z?O@64YO)2RT{MRe%{!}2F))pG(Sih~)xkgosK7*lF7m<7{{#Hn{6A@7N(HFEpDCdI z{f4mh3n7#7gpu zObo#Gk7);t0M>LTwjO3?%m>_Y#trxB_H+5ZUN2sxtvcW-eZ*`(w*@I61*Cu!kOER* zK?>wCzTPb8ne-@9Kng5F0slS}y0a!*XM8#sVgw)umczJ?S%NHHAZxO9vO=?*9xPie z#t^SZJ6ZC&nrxlD9hSp~<(h|QedXQN6$w;|Bv*)=KooXQYjz> z{+R+c98QNlUn keys, List 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 keys, List 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 keys, List args){ - sendEvalCommand(EVALSHA, sha1, keys, args); + public void evalsha(byte[] sha1, byte[] keyCount, byte[][] params){ + sendEvalCommand(EVALSHA, sha1, keyCount, params); } public void scriptFlush(){ diff --git a/src/main/java/redis/clients/jedis/BinaryJedis.java b/src/main/java/redis/clients/jedis/BinaryJedis.java index f0b9d73..044ff56 100644 --- a/src/main/java/redis/clients/jedis/BinaryJedis.java +++ b/src/main/java/redis/clients/jedis/BinaryJedis.java @@ -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 keys, List 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. - *

- * - * @return Script result - */ - public Object eval(byte[] script, List keys) { - return eval(script,keys, new ArrayList()); + private byte[][] getParams(List keys, List args){ + int keyCount = keys.size(); + byte[][] params = new byte[keyCount + args.size()][]; + + for(int i=0;i keys, String... args) { - List k = new ArrayList(); - for(String key:keys){ - k.add(SafeEncoder.encode(key)); - } - List a = new ArrayList(); - 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 keys, String... args) { - List k = new ArrayList(); - for(String key:keys){ - k.add(SafeEncoder.encode(key)); - } - List a = new ArrayList(); - 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){ diff --git a/src/main/java/redis/clients/jedis/Jedis.java b/src/main/java/redis/clients/jedis/Jedis.java index 78561a5..226ff65 100644 --- a/src/main/java/redis/clients/jedis/Jedis.java +++ b/src/main/java/redis/clients/jedis/Jedis.java @@ -2693,19 +2693,38 @@ public class Jedis extends BinaryJedis implements JedisCommands { return client.getStatusCodeReply(); } - public Object eval(String script, String... keys) { - List s = new ArrayList(keys.length); - for(String key : keys) - s.add(key); - - return eval(script, s); - } - - public Object eval(String script, List 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 keys, List args){ + int keyCount = keys.size(); + int argCount = args.size(); + + String[] params = new String[keyCount + args.size()]; + + for(int i=0;i keys, List 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 s = new ArrayList(keys.length); - for(String key : keys) - s.add(key); - - return evalsha(sha1, s); + public Object evalsha(String sha1, List keys, List args) { + return evalsha(sha1, keys.size(), getParams(keys, args)); } - public Object evalsha(String sha1, List 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(); } diff --git a/src/test/.DS_Store b/src/test/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..55c1fcbeb4ba2bef02771ea2748f3e4b0ea5c07d GIT binary patch literal 6148 zcmeH~J&wXa427SU6iC~oq@0EW>)m< zk%er^j=Knh3!DIf); zz>E~gV|@8Jqi52iNC7D@4+Z@DQ0UH@Y@PAxV2BZb99RzHI%Wy7c!8|R*2xOZa(b|A zwHQOZ9_?hw>uR!f_I6kfAC`AEpJHg%+hK(X&1yhF3P^#80*juHe*W+1ujcQ^n8@Auu4PPqH)~DC=`aY|^Zges(XZZ6Iz{HQ@6+Mjm#TR5vwoX=P`Vj~j6r{kv GD)0dNyb`AX literal 0 HcmV?d00001 diff --git a/src/test/java/.DS_Store b/src/test/java/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..d209edf2f0edc098a632ffe3bb1f8b7136f12568 GIT binary patch literal 6148 zcmeH~O^O0R4256R0l|$+m$mT#bAv+k1akoy+l3$q%Ixdt^ODNO9@o+gFOYhbRHc8u zMOO!a?S6(&U=3hNcg5C+ks0F;+;PT$3m(Jcbp5{FuAas$_j*9*HJ;aVSt0@=AOa#F z0wORW0&$4*{9jGzne-?kAOh1M;NOQrcdeM&FdfEu^b*wK32IGkU74X- zb`O@N7Hx>qlW;H~E2#COlz`Vz6KmQN(SN;E} zM4T<57=SAD-J*T z$HBK`Qa}nw0VyB_q`;LGr~*5Gyz;p^P6|kY+gHH94~_2F3&+Ixba03kfH-3~jPvLv zh|L4UUN|N)LbIe2lWNssSkf79mDdZ$#H7Qj`LMd#szb53o#(emhxJ5_Qa}ovD{!C7 zh1dTL{X+kLPSQ#WNP&N)fX&w1^@>lb+B$ih*V;yZrhCp8-Hr30aENkDjB?C{m*Zt5 bWnS|+_j}=(7<9&iPSnqU>mri^f33hbA{Z5> literal 0 HcmV?d00001 diff --git a/src/test/java/redis/clients/.DS_Store b/src/test/java/redis/clients/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..20845bd710c96181dc755ee637042cc04a94eef9 GIT binary patch literal 6148 zcmeH~J&pn~427Q;kXG7;k}?ek;06(5Pp}t2%TR!jC=h*)&a>l&S!y&|Jxk7uop^q} zVloC`+xxHqmHY zKm;a4AP#Y!|6db&COwJ>h`=-m`1hgEU2AIV8lMgh(E?ECOowqEy#%#*f?88sS7vCI z-GgPRMH}MzD5sX(S5sTpUJlFV!}8ANT@1~7Ijk_CSq;%30wORXFzfNs&;M`wtNwpf zqEG}x;GYq&`R-@8r2wyw<3^dk@$ KG>E`k2|NJGpc9Ay literal 0 HcmV?d00001 diff --git a/src/test/java/redis/clients/jedis/.DS_Store b/src/test/java/redis/clients/jedis/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..0b9a44bd2ada453415acdcb4f1a3b8e052beac74 GIT binary patch literal 6148 zcmeH~Jr2S!425kd5)w;C#w;9w8$_s_fD0ff8xlid&(V2yytFW*3O!5qi=CuD-_X<| zqK8+%7imRg4L6mYg^4Nhl|1Dp1LDvR*Zbx1xLa8kvDOket}&jEX$lFD011!)36Q{y z2>2n6^M5m=XX2xf013>4fPEhl+%$)ls{ZLf@D>2tpzMaR_Y%-#1!xW}RZ)RybPpO^ z)!PuO`*vuGbvd+Dt=mPT`OvttS{DP;x?MCOfoXPOAORAX5Lni{we$Z7|JMIcwlF0D z68JL$+H|MxfR~E1_2c!devYb*3modp5k@}&NbD%y!rd^RYyi!nr79{g{s=e*1`_xw Ffj1-y6RZFL literal 0 HcmV?d00001 diff --git a/src/test/java/redis/clients/jedis/tests/.DS_Store b/src/test/java/redis/clients/jedis/tests/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..534c0929912ac332544f9d7c58ced2a84156069e GIT binary patch literal 6148 zcmeHKyKciU3_PY83}ngJQNPeX5Q6jz@&jq(F|CK7yQh9vKdr~d(7^4MF2T{DPNH}+ ze1m8Lu-(V_1Z)8ebVq#pur%LyU)ZW5Mx^tM7rbM{WxSlui|pS6&K+>Vgf~7v_^;D+ z_Dz`-kOERb3P=Gda8m`Uybhb2o~py7fE2g~1^j+!bjMyeC&tymAzA?9n&B|cqn98y z4-k9doX7~xl1fafRf}OsXS`KjFPsyT4y)$F>djUiipAS`ev5QiPt+&{q`LzpI^#hn>Sw@pkx7C7R^S^YG!=&c literal 0 HcmV?d00001 diff --git a/src/test/java/redis/clients/jedis/tests/commands/ScriptingCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/ScriptingCommandsTest.java index 78825a9..acee2cf 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/ScriptingCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/ScriptingCommandsTest.java @@ -19,7 +19,11 @@ public class ScriptingCommandsTest extends JedisCommandTestBase { keys.add("key1"); keys.add("key2"); - List response = (List)jedis.eval(script, keys, "first", "second" ); + List args = new ArrayList(); + args.add("first"); + args.add("second"); + + List response = (List)jedis.eval(script, keys, args ); assertEquals(4, response.size()); assertEquals("key1", response.get(0)); @@ -34,7 +38,10 @@ public class ScriptingCommandsTest extends JedisCommandTestBase { List keys = new ArrayList(); keys.add("key1"); - String response = (String)jedis.eval(script, keys); + List args = new ArrayList(); + args.add("first"); + + String response = (String)jedis.eval(script, keys, args); assertEquals("key1", response); } @@ -45,7 +52,7 @@ public class ScriptingCommandsTest extends JedisCommandTestBase { List keys = new ArrayList(); keys.add("key1"); - Long response = (Long)jedis.eval(script, keys); + Long response = (Long)jedis.eval(script, keys, new ArrayList()); assertEquals(new Long(2), response); } @@ -53,8 +60,9 @@ public class ScriptingCommandsTest extends JedisCommandTestBase { @Test public void evalNoArgs() { String script = "return KEYS[1]"; - - String response = (String)jedis.eval(script, "key1"); + List keys = new ArrayList(); + keys.add("key1"); + String response = (String)jedis.eval(script, keys, new ArrayList()); assertEquals("key1", response); }