Redisson序列化方式替换为fastjson
我们在使用redisson时,若不适用序列化,则对开发人员不友好,而默认的Jackson可能会引发死循环异常。同时Jackson引入的包过多,所以引入Fastjson

redisson初始化
/**
* Create sync/async Redisson instance with default config
*
* @return Redisson instance
*/
public static RedissonClient create() {
Config config = new Config();
config.useSingleServer()
.setAddress("redis://127.0.0.1:6379");
return create(config);
}
/**
* Create sync/async Redisson instance with provided config
*
* @param config for Redisson
* @return Redisson instance
*/
public static RedissonClient create(Config config) {
return new Redisson(config);
}
我们看到redisson初始化的时候使用create方法创建,其中有个方法拥有config的参数
org.redisson.config.Config
public class Config {
......
private Codec codec;
.....
}
只需要实现codec就可以修改redisson的默认序列化方式了,而我们发现,redisson底层有个BaseCodec基类,所以我们继承BaseCodec实现。
FastJsonCodec
public class FastJsonCodec extends BaseCodec {
private final Encoder encoder = in -> {
ByteBuf out = ByteBufAllocator.DEFAULT.buffer();
try {
ByteBufOutputStream os = new ByteBufOutputStream(out);
JSON.writeJSONString(os, in, SerializerFeature.WriteClassName);
return os.buffer();
} catch (IOException e) {
out.release();
throw e;
} catch (Exception e) {
out.release();
throw new IOException(e);
}
};
private final Decoder<Object> decoder = (buf, state) ->
JSON.parseObject(new ByteBufInputStream(buf), Object.class);
@Override
public Decoder<Object> getValueDecoder() {
return decoder;
}
@Override
public Encoder getValueEncoder() {
return encoder;
}
}
初始化
Config config=new Config();
SingleServerConfig singleServerConfig = config.useSingleServer();
//设置连接地址:redis://127.0.0.1:6379
singleServerConfig.setAddress("redis://127.0.0.1:6379");
Codec codec=new FastJsonCodec();
config.setCodec(codec);
RedissonClient redisson = Redisson.create(config);