Node-redis: redis eval ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ nodeJS์—์„œ Lua ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰

์— ๋งŒ๋“  2017๋…„ 06์›” 22์ผ  ยท  1๋…ผํ‰  ยท  ์ถœ์ฒ˜: NodeRedis/node-redis

Redis์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด CLI๋ฅผ ํ†ตํ•ด Lua ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค .

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

๋”ฐ๋ผ์„œ ๋‚ด Lua ์Šคํฌ๋ฆฝํŠธ๋Š” 4 ๊ฐœ์˜ ํ‚ค์™€ 2 ๊ฐœ์˜ ์ธ์ˆ˜๋ฅผ๋ฐ›์Šต๋‹ˆ๋‹ค.

์ด์ œ Node.js์—์„œ ๋™์ผํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋‚ด ์•ฑ์—์„œ Redis๋ฅผ ๊ฐ€์ ธ ์˜ค๋Š” ๋ฐ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Lua ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ์œ„ํ•œ redisClient.eval (...) ํ•จ์ˆ˜์˜ ์ธ์ˆ˜์— ๋Œ€ํ•ด ์•Œ๋ ค์ฃผ๋Š” ์˜ˆ์ œ๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋‚˜๋Š” ์ž‘๋™ ํ•  ์ˆ˜์žˆ๋Š” ์ž„์˜์˜ ๊ฒƒ์„ ์น˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์•„๋ฌด๊ฒƒ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚ด ์งˆ๋ฌธ : node.js๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•„๋ž˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ CLI (command-line-interface)๋ฅผ ํ†ตํ•ด ์‹คํ–‰ํ•  ๋•Œ์™€ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

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

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

--eval ๋Š” '์ง„์งœ'redis ๋ช…๋ น์ด ์•„๋‹ˆ๋ผ redis-cli์˜ ์ถ”๊ฐ€ ์˜ต์…˜์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ์ „ํžˆ ์›ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

'use strict'
const redis = require('redis')
const client = redis.createClient()
const fs = require('fs')

client.eval(fs.readFileSync('./test.lua'), 2, 'key1', 'key2', 'first', 'second', function(err, res) {
  console.log(arguments);
});

์ผ๋ถ€ ๋ณด์•ˆ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ EVAL ์—๋Š” --eval ๋ณด๋‹ค ๋” ๋งŽ์€ ์˜ต์…˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. --eval ์™€ EVAL ์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ https://redis.io/topics/rediscli#running -lua-scripts๋ฅผ

>๋ชจ๋“  ๋Œ“๊ธ€

--eval ๋Š” '์ง„์งœ'redis ๋ช…๋ น์ด ์•„๋‹ˆ๋ผ redis-cli์˜ ์ถ”๊ฐ€ ์˜ต์…˜์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ์ „ํžˆ ์›ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

'use strict'
const redis = require('redis')
const client = redis.createClient()
const fs = require('fs')

client.eval(fs.readFileSync('./test.lua'), 2, 'key1', 'key2', 'first', 'second', function(err, res) {
  console.log(arguments);
});

์ผ๋ถ€ ๋ณด์•ˆ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ EVAL ์—๋Š” --eval ๋ณด๋‹ค ๋” ๋งŽ์€ ์˜ต์…˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. --eval ์™€ EVAL ์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ https://redis.io/topics/rediscli#running -lua-scripts๋ฅผ

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰