问题描述
由于编解码器的编码和解码阶段,我们正在试验我们的 Redisson 架构中的一些性能问题。
更改编解码器有一点作用,但还不够,所以如果之前已经完成,我们会考虑完全避免该阶段,将编码/解码的值存储在我们自定义编码的地图中。
例如:
private final Map<Object,ByteBuf> encodedKeys = new FixedSizeMap<Object,ByteBuf>(1000);
@Override
public ByteBuf encode(Object in) throws IOException {
ByteBuf key = encodedKeys.get(in);
if (in != null) {
return key;
}
ByteBuf out = ByteBufAllocator.DEFAULT.buffer();
ByteBufOutputStream os = new ByteBufOutputStream(out);
FSTObjectOutput oos = config.getobjectOutput(os);
try {
oos.writeObject(in);
oos.flush();
key = os.buffer();
encodedKeys.put(in,key);
return key;
} catch (IOException e) {
out.release();
throw e;
} catch (Exception e) {
out.release();
throw new IOException(e);
} finally {
if (!useCache) {
oos.resetForReUse(emptyArray);
}
}
}
};
这是一个好习惯吗?
已经有任何开发的编解码器可以做这样的事情吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)