已编码/已解码 Redisson 密钥的内部缓存

问题描述

由于编解码器的编码和解码阶段,我们正在试验我们的 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 (将#修改为@)