Maison >base de données >Redis >Comment sérialiser Redisson
Redisson est une grille de données basée sur la mémoire Java implémentée sur la base de Redis. Comparée à Jedis, qui expose les opérations sous-jacentes, Redisson. fournit une série d'objets communs Java distribués et fournit également de nombreux services distribués. (Apprentissage recommandé : Tutoriel vidéo Redis)
Sérialisation
La classe d'encodage d'objet de Redisson est utilisée pour convertir des objets Effectuer la sérialisation et désérialisation pour lire et stocker l'objet dans Redis.
L'encodeur par défaut de Redisson est JsonJacksonCodec. Lorsque JsonJackson sérialise des objets avec des références bidirectionnelles, une exception de boucle infinie se produit. Une fois que fastjson a extrait la double référence, il la remplacera automatiquement par le caractère de référence $ref et terminera le cycle.
Dans mon cas, j'ai sérialisé un service. Ce service a été hébergé par Spring, et il est également injecté les uns dans les autres avec un autre service. Fastjson peut être sérialisé vers Redis normalement, tandis que JsonJackson peut lancer une exception de boucle infinie. .
Afin de rendre visible le contenu sérialisé, il n'est pas nécessaire d'utiliser les autres encodeurs binaires intégrés de redission et d'implémenter l'encodeur par vous-même :
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; } }
Plus de Redis articles techniques connexes, veuillez visiter la colonne Tutoriel de démarrage de Redis pour apprendre !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!