【发布时间】:2013-05-30 08:46:37
【问题描述】:
例如我将元组 T = {k1, v1, k2, v2} 通过 jedis 保存到 redis:
eredis:q(Conn, ["SET", <<"mykey">>, term_to_binary(T)]).
我正在尝试使用下面的代码来阅读这个 erlang 术语:
Jedis j = Redis.pool.getResource();
byte[] t = j.get("mykey").getBytes();
OtpInputStream ois = new OtpInputStream(t);
System.out.println(OtpErlangObject.decode(ois));
错误是:com.ericsson.otp.erlang.OtpErlangDecodeException:未知数据类型:239。
那么如何正确获取 erlang 术语?
Erlang 方面:
term_to_binary({k1, v1, k2, v2})。
>
Java端:
j.get("mykey").getBytes():
-17 -65 -67 104 4 100 0 2 107 49 100 0 2 118 49 100 0 2 107 50 100 0 2 118 50。
似乎只有前 3 个字节不同。所以我把它们改成字节(131), 然后就可以用 System.out.println(OtpErlangObject.decode(ois)) 正确打印了。
但是当术语比较复杂的时候,比如里面有list的记录,就不行了。因为其他一些字符不仅会出现在数据的开头,还会出现在数据的末尾和中间。
为什么我保存的数据与我得到的不同?
【问题讨论】:
-
您可以将数据存储为字符串。比如说,json格式。
-
但是out项目运行了很久,很多数据都是用erlang term存储在redis中的。那么除了改变数据的格式,还有其他的方式来读取term吗?
标签: java erlang redis jedis erlang-driver