快活林资源网 Design By www.csstdc.com
问题
在 Redis 里执行 get 或 hget 不存在的 key 或 field 时返回值在终端显式的是 (nil),类似于下面这样
127.0.0.1:6379> get test_version (nil)
如果在 Lua 脚本中判断获取到的值是否为空值时,就会产生比较迷惑的问题,以为判断空值的话就用 nil 就可以了,然鹅事实却并不是这样的,如下所示:
127.0.0.1:6379> get test_version (nil) 127.0.0.1:6379> EVAL "local a = redis.call('get',KEYS[1]) print(a) if a == 'nil' then return 1 else return 0 end" 1 test_version test_version (integer) 0
我们来看下执行 Lua 脚本返回结果的数据类型是什么
127.0.0.1:6379> get test_version (nil) 127.0.0.1:6379> EVAL "local a = redis.call('get',KEYS[1]) return type(a)" 1 test_version test_version "boolean"
通过上面的脚本可以看到,当 Redis 返回的结果为 (nil) 时候,其真实的数据类型为 boolean,因此我们直接判断 nil 是有问题的。
Redis 官方文档
通过翻阅官方文档,找到下面所示的一段话,
Redis to Lua conversion table.
- Redis integer reply -> Lua number
- Redis bulk reply -> Lua string
- Redis multi bulk reply -> Lua table (may have other Redis data types nested)
- Redis status reply -> Lua table with a single ok field containing the status
- Redis error reply -> Lua table with a single err field containing the error
- Redis Nil bulk reply and Nil multi bulk reply -> Lua false boolean type
Lua to Redis conversion table.
- Lua number -> Redis integer reply (the number is converted into an integer)
- Lua string -> Redis bulk reply
- Lua table (array) -> Redis multi bulk reply (truncated to the first nil inside the Lua array if any)
- Lua table with a single ok field -> Redis status reply
- Lua table with a single err field -> Redis error reply
- Lua boolean false -> Redis Nil bulk reply.
解决方案
通过官方文档,我们知道判断 Lua 脚本返回空值使用,应该直接判断 true/false,修改判断脚本如下所示
127.0.0.1:6379> get test_version (nil) 127.0.0.1:6379> EVAL "local a = redis.call('get',KEYS[1]) if a == false then return 'empty' else return 'not empty' end" 1 test_version test_version "empty"
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
快活林资源网 Design By www.csstdc.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
快活林资源网 Design By www.csstdc.com
暂无评论...
更新日志
2024年05月08日
2024年05月08日
- 群星.2024-完全省钱恋爱手册原创剧集原声带【华纳】【FLAC分轨】
- 重云角色培养心得,重云角色武器选择推荐
- 菲谢尔角色玩法推荐,菲谢尔角色天赋技能
- 菲谢尔玩法推荐,菲谢尔角色定位及阵容
- 猫咪和汤最高多少级 最高等级介绍
- 下一站江湖2钟梓州在哪儿 具体位置介绍
- 崩坏星穹铁道流萤遗器搭配推荐 选什么遗器好
- 逆水寒手游五子棋第二十九关怎么过 逆水寒手游残局攻略大全
- 逆水寒手游五子棋第三十关怎么过 逆水寒手游残局攻略大全
- 逆水寒手游五子棋第三十一关怎么过 逆水寒手游残局攻略大全
- 开始回暖了!《绝地潜兵2》Steam好评率正在持续上升
- 15周年了!《植物大战僵尸》疯狂戴夫竟然有原型
- 《塞尔达传说》真人电影确定将于未来十年内上映!
- 瑞鸣音乐·郭雅志《八千里路》头版限量编号24K金碟[低速原抓WAV+CUE]
- 【乡村蓝调】TomoAkikawabaya-2024-TheCastleII(FLAC)