Redis:使用消息包在Lua中读取Java映射

Redis:使用消息包在Lua中读取Java映射,java,lua,redis,msgpack,Java,Lua,Redis,Msgpack,我想在Redis中存储Java数据结构。我用Java编写了如下代码: public static void main(String[] args) throws IOException { Map<String, String> map = new HashMap<String, String>(); map.put("foo", "1"); map.put("bar", "2"); map.put("baz", "3"); Arr

我想在Redis中存储Java数据结构。我用Java编写了如下代码:

public static void main(String[] args) throws IOException {
    Map<String, String> map = new HashMap<String, String>();
    map.put("foo", "1");
    map.put("bar", "2");
    map.put("baz", "3");
    ArrayList<String> list = new ArrayList<String>();
    list.add("foo");
    list.add("bar");
    MessagePack mp = new MessagePack();
    byte[] serializedMap = mp.write(map);
    byte[] serializedList = mp.write(list);
    Jedis jedis = new Jedis("localhost");
    jedis.zadd("test".getBytes(), 1000, serializedMap);
    jedis.zadd("test2".getBytes(), 1000, serializedList);
    jedis.close();
}
不幸的是,我无法处理DMAP。我尝试过,但没有运气,像这样:

eval "local r = redis.call('zrange', 'test', 0, 1); return cmsgpack.unpack(r[1]);" 0
(empty list or set)

有谁能给我一个正确的提示吗?

请参阅的Lua和Redis数据类型之间的转换部分。正如您所看到的,Lua到Redis的转换规则只处理:

  • Lua表(数组)=序列
  • Lua具有单个
    ok
    字段的表格
  • Lua带有单个
    err
    字段的表
这就是为什么不处理泛型映射(它被截断为Lua数组中的第一个nil,如果有的话):

注:有关更多详细信息,请参见

eval "local r = redis.call('zrange', 'test', 0, 1); return cmsgpack.unpack(r[1]);" 0
(empty list or set)
$ redis-cli
> eval 'return cmsgpack.pack{foo="1", bar="2", baz="3"}' 0
"\x83\xa3baz\xa13\xa3bar\xa12\xa3foo\xa11"
> eval 'return cmsgpack.unpack(ARGV[1])' 0 "\x83\xa3baz\xa13\xa3bar\xa12\xa3foo\xa11"
(empty list or set)