Redisson ist ein Java-speicherbasiertes Datengrid, das auf der Basis von Redis implementiert wird und zugrunde liegende Vorgänge offenlegt stellt eine Reihe verteilter gemeinsamer Java-Objekte und viele verteilte Dienste bereit. (Empfohlenes Lernen: Redis-Video-Tutorial)
Serialisierung
Die Objektcodierungsklasse von Redisson wird zum Konvertieren von Objekten verwendet. Führen Sie eine Serialisierung durch und Deserialisierung zum Lesen und Speichern des Objekts in Redis.
Der Standard-Encoder von Redisson ist JsonJacksonCodec. Wenn JsonJackson Objekte mit bidirektionalen Referenzen serialisiert, tritt eine Endlosschleifenausnahme auf. Nachdem fastjson die doppelte Referenz ausgecheckt hat, ersetzt es diese automatisch durch das Referenzzeichen $ref und beendet den Zyklus.
In meinem Fall habe ich einen Dienst serialisiert, der von Spring gehostet wurde, und er kann normal in einen anderen Dienst eingefügt werden, während JsonJackson eine Endlosschleifenausnahme auslösen kann.
Um den serialisierten Inhalt sichtbar zu machen, ist es nicht erforderlich, die anderen integrierten binären Encoder von Redission zu verwenden und den Encoder selbst zu implementieren:
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; } }
Mehr Redis Verwandte technische Artikel. Bitte besuchen Sie die Spalte Redis Getting Started Tutorial, um mehr zu erfahren!
Das obige ist der detaillierte Inhalt vonSo serialisieren Sie Redisson. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!