大家好 请教一个 redis lua 脚本问题

2022-03-29 14:30:07 +08:00
 gosansam

调用 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);
    }
1674 次点击
所在节点    Redis
1 条回复
Yoock
2022-03-29 15:29:12 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/843628

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX