복붙노트

[REDIS] 레디 스에게 평가 명령을 실행하는 것은 nodeJS에서 루아 스크립트를 실행하려면

REDIS

레디 스에게 평가 명령을 실행하는 것은 nodeJS에서 루아 스크립트를 실행하려면

레디 스에서이 같은 CLI를 통해 루아 스크립트를 실행합니다 -

$ redis-cli --eval debug_script.lua key1 key2 key3 key4 , arg1 arg2

그래서, 내 루아 스크립트는 4 키와 2 개 인자를 받아들입니다.

지금은 Node.js.에서 동일한 스크립트를 실행하려면

나는 내 응용 프로그램에서 레디 스를 가져 오기위한이 라이브러리를 사용하고 있습니다.

나는 루아 스크립트를 실행하기위한 redisClient.eval (...) 함수의 인수에 대해 알 수있는 예를 찾을 수 없습니다.

그래서 난 그냥 힘 작업이 무작위로 뭔가를 타격하고있다. 그러나 아무것도 작동하는 것 같다 없습니다.

내 app.js는 다음과 같이 간다 :

var redis = require("redis")
var client = redis.createClient();

// my hit and trial guess
client.eval(["script_file.lua", 1 "score" 0 10 , "meeting_type:email" meeting_status:close], function(err, res){
    console.log("something happened\n");
});

내 질문 : 어떻게이 CLI (명령 줄 인터페이스)를 통해 실행 않는 경우로이 같은 일을 반환 그래서, Node.js를을 사용하여 명령 아래 실행합니다.

$ redis-cli --eval debug_script.lua key1 key2 key3 key4 , arg1 arg2

해결법

  1. ==============================

    1.몇 가지 솔루션을 찾을 수 :

    몇 가지 솔루션을 찾을 수 :

    해결 방법 1)

    var redis = require('redis')
    var client = redis.createClient()
    var fs = require('fs')
    
    client.eval(fs.readFileSync('./debug_script.lua'), 4, key1, key2, key3, key4, arg1, arg2, function(err, res) {
      console.log(res);
    });
    

    참고 : 4 (평가의 두 번째 인수는) 키의 수는 스크립트에 전달 될 나타냅니다.

    해결 방법 2)은 자식 프로세스 실행 CLI 명령을 작성합니다.

    var redis = require("redis");
    var client = redis.createClient();
    
    var exec = require('child_process').exec;
    
    var cmd = 'redis-cli --eval debug_script.lua key1 key2 key3 key4 , arg1 arg2';
    
    
    exec(cmd, function(error, stdout, stderr) {
        // command output is in stdout
            console.log("something happened \n");
            console.log(stdout);
        });
    
  2. from https://stackoverflow.com/questions/44676974/executing-redis-eval-command-to-run-lua-script-in-nodejs by cc-by-sa and MIT license