V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gosansam
V2EX  ›  Redis

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

  •  
  •   gosansam · 2022-03-29 14:30:07 +08:00 · 1835 次点击
    这是一个创建于 971 天前的主题,其中的信息可能已经有所发展或是发生改变。

    调用 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 条附言  ·  2022-03-29 15:19:38 +08:00
    不知道怎么解决了。。脚本不用 local 声明变量,入参用 Object 数组放 long 数值可以了
    1 条回复    2022-03-29 15:29:12 +08:00
    Yoock
        1
    Yoock  
       2022-03-29 15:29:12 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   876 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:01 · PVG 05:01 · LAX 13:01 · JFK 16:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.