调用 tonumber 函数后都是 nil ,直接 return tonumber(ARGV[2])也是 null ,但是下面的返回 ARGV[2]返回是字符串 2 ,在 redis 客户端执行 eval "return tonumber(ARGV[1])" 1, 1, 2 可以返回 2 ,请问是为啥呢?
@Test
void testSc() {
String s =
"local first = tonumber(ARGV[1]) " +
"local second = tonumber(ARGV[2]) " +
"local third = tonumber(ARGV[3]) " +
"local fourth= tonumber(ARGV[4]) " +
// "return tonumber(ARGV[2])"; //返回 null
"return second"; //返回 null
DefaultRedisScript<Long> script = new DefaultRedisScript<>();
script.setScriptText(s);
script.setResultType(Long.class);
Long executeTimes = redisTemplate.execute(script, Collections.singletonList("key"), 1 + "", 2 + "",
3 + "", 4 + "");
System.out.println("tonumber: " + executeTimes);
s =
"local first = tonumber(ARGV[1]) " +
"local second = tonumber(ARGV[2]) " +
"local third = tonumber(ARGV[3]) " +
"local fourth= tonumber(ARGV[4]) " +
"return ARGV[4] "; //返回 4
DefaultRedisScript<String> redisScript = new DefaultRedisScript<>();
redisScript.setScriptText(s);
redisScript.setResultType(String.class);
String res = redisTemplate.execute(redisScript, Collections.singletonList("key"), 1 + "", 2 + "",
3 + "", 4 + "");
System.out.println("string: " + res);
}
1
Yoock 2022-03-29 15:29:12 +08:00
|