在redis lua中解码msgpack

时间:2017-06-12 13:36:50

标签: lua redis msgpack

public class MsgPackInRedis {
    private String ip;
    private int port;
    private String session;
    private String protocol;
}
MsgPackInRedis msgPackStringInRedis = new MsgPackInRedis();

我使用msgpack对类 MsgPackInRedis 的java对象 msgPackStringInRedis 进行编码,然后存储在redis中。 而且我想在以redis运行的lua中解码,我怎样才能得到" session " ? 我可以在下面这样做,按索引3进行会话吗?

local msgPackObject = cmsgpack.unpack(msgPackStringInRedis)
local session = msgPackObject[3]

2 个答案:

答案 0 :(得分:1)

MessagePack是一种编码 - 认为非易读的JSON。事实上,这个网站在两者之间进行了来回翻译:http://kawanet.github.io/msgpack-lite/

将您的(0x94 0xc0 0x00 0xa4 0x41 0x42 0x43 0x44 0xc0)提供给上述网站,您可以看到如下所示的JSON表示:

[
  null,
  0,
  "ABCD",
  null
]

您可以在Redis'中测试Lua也是,例如(请注意,Lua 5.1接受 decimal 字节表示,因此示例中相同有效负载的表示形式不同):

$ redis-cli EVAL "return(cmsgpack.unpack('\148\192\00\164\65\66\67\68\192')[3])" 0
"ABCD"

坦率地说,我发现你的代码没有问题。您遇到的问题是什么?

答案 1 :(得分:0)

假设您的MessagePack-ed数据存储在名为foo的字符串键中,这将进行出价:

EVAL "return cmsgpack.unpack(redis.call('GET', KEYS[1]))" 1 foo

注意:以上假设数据被序列化为数组。返回对象将不起作用,因为Redis的协议不支持该对象。