redisson如何序列化

互联网 19-11-27

Redisson 是一个在 Redis 的基础上实现的 Java 驻内存数据网格,相较于暴露底层操作的Jedis,Redisson提供了一系列的分布式的 Java 常用对象,还提供了许多分布式服务。 (推荐学习:Redis视频教程)

序列化

Redisson的对象编码类是用于将对象进行序列化和反序列化,以实现对该对象在Redis里的读取和存储。

由Redisson默认的编码器为JsonJacksonCodec,JsonJackson在序列化有双向引用的对象时,会出现无限循环异常。而fastjson在检查出双向引用后会自动用引用符$ref替换,终止循环。

在我的情况中,我序列化了一个service,这个service已被spring托管,而且和另一个service之间也相互注入了,用fastjson能 正常序列化到redis,而JsonJackson则抛出无限循环异常。

为了序列化后的内容可见,所以不用redission其他自带的二进制编码器,自行实现编码器:

import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializerFeature; 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.BaseCodec; import org.redisson.client.protocol.Decoder; import org.redisson.client.protocol.Encoder;  import java.io.IOException;  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;  } }

更多Redis相关技术文章,请访问Redis入门教程栏目进行学习!

以上就是redisson如何序列化的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: redisson
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:redis的增量同步如何实现

相关资讯