在 Redis lua 中解码 msgpack
decode msgpack in redis lua
public class MsgPackInRedis {
private String ip;
private int port;
private String session;
private String protocol;
}
MsgPackInRedis msgPackStringInRedis = new MsgPackInRedis();
我用msgpack编码了一个java对象msgPackStringInRedis of class MsgPackInRedis,然后存储在redis中。
我想在 lua 中解码它,它在 redis 中运行,我怎样才能得到“session”?
我可以这样做吗,按索引 3 获取会话?
local msgPackObject = cmsgpack.unpack(msgPackStringInRedis)
local session = msgPackObject[3]
假设您的 MessagePack-ed 数据存储在名为 foo
的字符串键中,这将满足您的要求:
EVAL "return cmsgpack.unpack(redis.call('GET', KEYS[1]))" 1 foo
注意:以上假设数据被序列化为数组。返回一个对象将不起作用,因为 Redis 的协议不支持它。
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('82[=11=]42')[3])" 0
"ABCD"
坦率地说,我认为您的代码没有问题。您遇到的问题到底是什么?
public class MsgPackInRedis {
private String ip;
private int port;
private String session;
private String protocol;
}
MsgPackInRedis msgPackStringInRedis = new MsgPackInRedis();
我用msgpack编码了一个java对象msgPackStringInRedis of class MsgPackInRedis,然后存储在redis中。 我想在 lua 中解码它,它在 redis 中运行,我怎样才能得到“session”? 我可以这样做吗,按索引 3 获取会话?
local msgPackObject = cmsgpack.unpack(msgPackStringInRedis)
local session = msgPackObject[3]
假设您的 MessagePack-ed 数据存储在名为 foo
的字符串键中,这将满足您的要求:
EVAL "return cmsgpack.unpack(redis.call('GET', KEYS[1]))" 1 foo
注意:以上假设数据被序列化为数组。返回一个对象将不起作用,因为 Redis 的协议不支持它。
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('82[=11=]42')[3])" 0
"ABCD"
坦率地说,我认为您的代码没有问题。您遇到的问题到底是什么?