如何使用redis scripto和redis DB在LUA中执行null\nil签入?
我正在node.js中使用scripto编写脚本,并尝试对数据库中的值执行nil检查: 以下是js代码(用于节点)- 但是我不能在if语句中进入“ch为零”。。。任何帮助???Lua片段:如何使用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)
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);
});