2014-01-26 3 views
3

내가 scripto를 사용하여, Node.js를에서 스크립트를 쓰고 있어요, 나는 데이터베이스에서 값으로 전무 검사를 할 노력하고있어 : -null을하는 방법 redis-scripto 및 redis DB로 LUA를 체크인 하시겠습니까?

var redis = require("redis"); 
var redisClient = redis.createClient("6379","localhost"); 
var Scripto = require('redis-scripto'); 
var scriptManager = new Scripto(redisClient); 

var scripts = { 
    'test':'local function test(i) '+ 
    'if (i==nil) then return i end '+ 
    'local ch = redis.call("get", i) '+ 
    'if (ch==nil) then return ("ch is nil") '+ 
    'else return "1" '+ 
    'end end '+ 
    'return (test(KEYS[1]))', 
}; 

scriptManager.load(scripts); 
scriptManager.run('test', ["someInvalidKey"], [], function(err,result){ 
    console.log(err || result); 
}); 
여기 는 (노드)에 JS 코드

하지만 나는 에 들어갈 수 없다. if 문에 "ch is nil" ... 어떤 도움 ??

답변

13

루아 조각 :

redis.call("get", i) 

레디 스 'GET 방법은 결코 전무를 반환하지만, 더 키가 존재하지 않는 경우 부울 값 (거짓)을 반환합니다.

가 코드를 변경

:

local function test(i) 
    if (i==nil) then 
    return 'isnil ' .. i 
    end 
    local ch = redis.call("get", i) 
    if (ch==nil or (type(ch) == "boolean" and not ch)) then 
    return ("ch is nil or false") 
    else 
    return "isthere '" .. ch .. "'" 
    end 
end 
return (test(KEYS[1])) 

또는 간단한 (다른 유형 사이에 확인 루아 평등 허용, 항상 false를 반환) :

local function test(i) 
    if (i==nil) then 
    return 'isnil ' .. i 
    end 
    local ch = redis.call("get", i) 
    if (ch==false) then 
    return ("ch is false") 
    else 
    return "isthere '" .. ch .. "'" 
    end 
end 
return (test(KEYS[1])) 

당신이 그것으로 놀러 경우 좀 더 , 당신은 당신이 그것보다 더 간단하게 얻을 수 있다는 것을 알게 될 것입니다, 그러나 당신은 요점을 얻을 것입니다.

희망합니다. TW

+0

고마워요! 몇 가지 점을 가지고 :) –

+0

당신은 오신 것을 환영합니다! –