如何使用redis scripto和redis DB在LUA中执行null\nil签入?

如何使用redis scripto和redis DB在LUA中执行null\nil签入?,lua,redis,null,node-redis,null-check,Lua,Redis,Null,Node Redis,Null Check,我正在node.js中使用scripto编写脚本,并尝试对数据库中的值执行nil检查: 以下是js代码(用于节点)- 但是我不能在if语句中进入“ch为零”。。。任何帮助???Lua片段: redis.call(“get”,i) Redis'GET方法从不返回nil,但如果不存在键,则返回布尔值(false) 将代码更改为: 局部功能测试(一) 如果(i==nil),那么 返回'isnil'。。我 结束 本地ch=redis.call(“get”,i) 如果(ch==nil或(type(ch)

我正在node.js中使用scripto编写脚本,并尝试对数据库中的值执行nil检查: 以下是js代码(用于节点)-

但是我不能在if语句中进入“ch为零”。。。任何帮助???

Lua片段:

redis.call(“get”,i)
Redis'
GET
方法从不返回nil,但如果不存在键,则返回布尔值(false)

将代码更改为:

局部功能测试(一)
如果(i==nil),那么
返回'isnil'。。我
结束
本地ch=redis.call(“get”,i)
如果(ch==nil或(type(ch)==boolean而非ch)),则
返回(“ch为零或为假”)
其他的
返回“isthere”。。中国。。"'"
结束
结束
返回(测试(键[1]))
或者更简单(允许在不同类型之间进行Lua相等性检查,总是返回false):

局部功能测试(一)
如果(i==nil),那么
返回'isnil'。。我
结束
本地ch=redis.call(“get”,i)
如果(ch==false),则
返回(“ch为假”)
其他的
返回“isthere”。。中国。。"'"
结束
结束
返回(测试(键[1]))
如果你再多玩一点,你会发现你可以得到比这更简单的东西,但你会明白重点


希望这有帮助,TW

这救了我。为什么nil/null的返回被当作布尔值false处理,这是毫无意义的。非常感谢你!这很有趣,因为最新的redis文档中说:“获取key的值。如果key不存在,则返回特殊值nil”,但我发现这篇文章中描述的行为与此相同…@Nitax,它比这稍微多一些。在Lua里面,这是假的。但是当返回给客户时,它是零。这可能与Lua的限制有关。尼尔斯不是卢阿最强的壮举。尽管如此,我还是喜欢这门语言
redis cli get blah
(nil)
redis cli eval'返回redis.call(“get”,“blah”)'0
(nil)
redis cli eval'返回到字符串(redis.call(“get”,“blah”))'0
“false”
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);
});