下面是一段java代码,它将数据发布到Redis
import com.streambase.sb.util.ByteOrderedDataOutput;
byte[] valuebuffer=null;
ByteOrderedDataOutput boutput = new ByteOrderedDataOutput(0,tuple.getByteOrder());
tuple.serialize(boutput,0);
valuebuffer = boutput.getBuffer();
byte[] keybuffer = null;
String keyvalue = redisStream+"."+keyFieldStr;
keybuffer = keyvalue.getBytes();
strLuaCommands += "redis.call('set',KEYS["+ (++keyCount) +"],ARGV["+ (++argCount) +"])";
keys.add(keybuffer);
args.add(valuebuffer);
我能够通过python struct获取数据,但格式不正确。
import redis, struct
redis_client = redis.StrictRedis(host="abc.com", port=6379, db=0)
temp = redis_client.get('samplekey')
struct.unpack("<" + ("s" * (len(temp))), temp)
1条答案
按热度按时间bpsygsoo1#
Tuple.serialize()使用com.streambase.sb.util.ByteOrderedDataOutput类,该类从未成为StreamBase公共API的一部分,因此Tuple.serialize()方法也不应被视为公共API的一部分。
而且,没有特别的理由相信Python struct.unpack()方法知道如何理解StreamBase的ByteOrderedDataOutput,不管它是什么,所以你解包的不是你想要的也就不足为奇了。
一种快速想象的解决方案是使用StreamBase Python运算符将StreamBase元组转换为Python对象,然后使用Python脚本编写任何你想写入redis的内容。然后,由于你现在已经使用相同的Python补充库函数对内容进行了编码和解码,所以你将有更好的机会避免损坏数据。