在 Redis 中遇到的坑点
2021年6月10日小于 1 分钟Redis
Lua脚本
call 结果比较 Redis Nil 类型 -> Lua boolean false
- 先看一段代码
# 如果 test 有值,则返回1,否则返回0
127.0.0.1:6379 > eval "local a = redis.call('get', 'key1'); if a == nil then return 0; else return 1; end" 0\
(integer) 1
Lua 脚本的逻辑很清晰,而且可以确保 key1
是没有值的
但是!为啥会返回 1 ?
根据 官方文档 所示
Redis Nil bulk reply and Nil multi bulk reply -> Lua false boolean type
也就是说,Redis 会将 nil
转换成 Lua 里 boolean
的 false
值
- 改变一下 Lua 脚本的判断条件
127.0.0.1:6379 > eval "local a = redis.call('get', 'key1'); if a == false then return 0; else return 1; end" 0\
(integer) 0
经过调整之后,终于返回预期结果