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 얻기를 방문하세요. 학습하기 위한 Tutorial 칼럼을 시작했습니다!
위 내용은 재디슨을 직렬화하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!