使用Lua脚本时,HGETALL返回数组而不是散列表[Rails,Redis,Lua]
2020-6-20 9:12:55
收藏:0
阅读:93
评论:0
问题是什么?
通过lua脚本访问包含哈希对象的redis键实际上返回数组而不是哈希。
问题
解决这个问题的最佳时间效率方法是什么?
- 将值以字符串的形式保存为Ruby哈希,然后使用eval进行转换
- 将哈希拆分为多个获取,每个获取都有单个值
- 将值以字符串的形式保存为JSON对象,然后使用oj gem进行加载
问题详情
HMSET
HMSET "[1, 79, 29, 44]" 0 1
Redis-rb gem
当使用redis gem访问键时,它返回哈希,如预期所示。
2.1.3 :001 > require "redis"
require => true
2.1.3 :002 > r = Redis.new
=> #<Redis client v3.2.1 for redis://127.0.0.1:6379/0>
2.1.3 :003 > r.hgetall("[1, 79, 29, 44]")
=> {"0"=>"1"}
2.1.3 :004 >
Wolverine gem
当使用wolverine使用lua脚本(hmget.lua)访问相同的键时,它实际上返回一个数组。
[1] pry(#<CubosController>)> a = MessagePack.unpack(Wolverine.hmget(["[1, 79, 29, 44]"]))
=> {"[1, 79, 29, 44]"=>["0", "1"]}
[2] pry(#<CubosController>)> a["[1, 79, 29, 44]"].class
=> Array
Redis-db-scripting gem
具有相同问题:
2.1.3 :005 > redis = Redis.new()
=> #<Redis client v3.2.1 for redis://127.0.0.1:6379/0>
2.1.3 :006 > scripts = Redis::Scripting::Module.new(redis,"/Users/rapha/projetos/qlikview/app/wolverine")
=> <Redis::Scripting::Module: 0x3fd69c62aec8 @source_dir="/Users/rapha/projetos/qlikview/app/wolverine" @redis=# <Redis:0x007fad39571730>>
2.1.3 :007 > MessagePack.unpack(scripts.run(:hmget, ["[1, 79, 29, 44]"], []))
=> {"[1, 79, 29, 44]"=>["0", "1"]}
hmget.lua
local data = {}
for _, key in ipairs(KEYS) do
data[key] = redis.call('HGETALL', key)
end
return cmsgpack.pack(data)
消息压缩/解压缩不是问题,已经测试过。
在Wolverine中打开的问题
https://github.com/Shopify/wolverine/issues/13
已经解决的类似问题
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法