おそらく問題は、HGET から結果を取得するために String オブジェクトを使用していることです。byte[] が必要です。String オブジェクトは、コードページや null 文字の解釈など、あらゆる種類の厄介なことを行います。たとえそれが機能したとしても、それは多くのオーバーヘッドです。したがって、バイト[]を使用してください。あなたのredisクライアントにはそれを行う方法があると思います。
Redis から msgpack データを取得するために aredis を使用します。ここにいくつかの手がかりがあります:
import org.aredis.cache.AsyncRedisClient;
import org.aredis.cache.AsyncRedisFactory;
import org.aredis.cache.DataHandler;
import org.aredis.cache.RedisCommand;
import org.aredis.cache.RedisCommandInfo;
import org.aredis.io.CompressibleByteArrayOutputStream;
import org.aredis.net.ServerInfo;
private class RawHandler extends Object implements DataHandler {
@Override
public Object deserialize(Object arg0, byte[] arg1, int arg2, int arg3, ServerInfo arg4) throws IOException {
return arg1;
}
@Override
public void serialize(Object arg0, Object arg1, CompressibleByteArrayOutputStream arg2, ServerInfo arg3) throws IOException {
throw new NotActiveException("Not supported, deserialize only.");
}
}
Future<RedisCommandInfo> futureOE = oRedis.oCliDpart.submitCommand(
new RawHandler(),
RedisCommand.ZRANGEBYLEX,
"_ourkey#blabla.d",
String.format("[%s;", cDbAndTable),
String.format("(%s<", cDbAndTable));
...
final Object[] val = (Object[]) futureOE.get().getResult();
for (Object item : val) {
if (item instanceof byte[]) {
...
msgpack の逆シリアル化は、そこから簡単に行うことができます。
これが役に立てば幸いです、TW