>데이터 베이스 >Redis >재디슨을 직렬화하는 방법

재디슨을 직렬화하는 방법

(*-*)浩
(*-*)浩원래의
2019-11-27 10:00:455927검색

재디슨을 직렬화하는 방법

Redisson은 Redis를 기반으로 구현된 Java 메모리 상주 데이터 그리드입니다. 기본 작업을 노출하는 Jedis와 비교하여 Redisson은 일련의 분산 Java 공통 개체를 제공하며 많은 분산 서비스도 제공합니다. (추천 학습: iRedis 비디오 튜토리얼 )

직렬화

Redisson의 개체 코딩 클래스는 개체 저장소를 직렬화하고 심화하는 데 사용됩니다.

Redisson의 기본 인코더는 JsonJacksonCodec입니다. JsonJackson이 양방향 참조로 객체를 직렬화하면 무한 루프 예외가 발생합니다. fastjson은 이중 참조를 확인한 후 자동으로 참조 문자 $ref로 바꾸고 순환을 종료합니다.

저의 경우 서비스를 직렬화했습니다. 이 서비스는 spring에서 호스팅되었으며 다른 서비스에도 주입됩니다. Fastjson을 사용하여 정상적으로 redis로 직렬화할 수 있지만 JsonJackson이 비정상적으로 발생합니다.

직렬화된 콘텐츠를 표시하기 위해 내장된 다른 재분배 바이너리 인코더를 사용하고 인코더를 직접 구현할 필요가 없습니다.

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 얻기를 방문하세요. 학습하기 위한 Tutorial 칼럼을 시작했습니다!

위 내용은 재디슨을 직렬화하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.