小工具知识网

当前位置: 首页 > 行业知识 > redisson 使用fastJson2序列化

行业知识

redisson 使用fastJson2序列化

2026-11-11 04:34:52 来源:互联网转载

前因:一个项目:有人用redisTemplete存数据(使用了fastjson2),使用redisson取的时候就会报错。要让redisTemplete与redisson序列化一致

一、自定义序列化器

import com.alibaba.fastjson2.JSON;import com.alibaba.fastjson2.JSONReader;import com.alibaba.fastjson2.JSONWriter;import io.netty.buffer.ByteBuf;import io.netty.buffer.ByteBufAllocator;import io.netty.buffer.ByteBufInputStream;import io.netty.buffer.ByteBufOutputStream;import org.redisson.client.codec.Codec;import org.redisson.client.codec.StringCodec;import org.redisson.client.handler.State;import org.redisson.client.protocol.Decoder;import org.redisson.client.protocol.Encoder;import org.redisson.codec.JsonJacksonCodec;import org.springframework.http.codec.json.Jackson2JsonDecoder;import org.springframework.http.codec.json.Jackson2SmileDecoder;import java.io.IOException;import java.nio.charset.Charset;/** * @author yh */public class FastJson2JsonRedissonSerializer extends StringCodec {    public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");    private final Encoder encoder = new Encoder() {        @Override        public ByteBuf encode(Object in) throws IOException {            ByteBuf out = ByteBufAllocator.DEFAULT.buffer();            try {                ByteBufOutputStream os = new ByteBufOutputStream(out);                JSON.writeTo(os, in, JSONWriter.Feature.WriteClassName);//                return JSON.toJSONBytes(in, JSONWriter.Feature.WriteClassName);                return os.buffer();            } catch (Exception e) {                out.release();                throw new IOException(e);            }        }    };    private final Decoder decoder = new Decoder() {        @Override        public Object decode(ByteBuf buf, State state) throws IOException {            return JSON.parseObject(new ByteBufInputStream(buf), Object.class, JSONReader.Feature.SupportAutoType);        }    };    @Override    public Decoder getValueDecoder() {        return decoder;    }    @Override    public Encoder getValueEncoder() {        return encoder;    }}

二、redsson 配置里添加自定义序列化器(RedissonConfiguration)

// 创建fastjson的Redisson序列化器 config.setCodec(new FastJson2JsonRedissonSerializer());

三、测试结果

上一篇:宝塔面板怎么解析?

下一篇:网易怎么开大型服务器?