Maison >base de données >Redis >Comment sérialiser Redisson

Comment sérialiser Redisson

(*-*)浩
(*-*)浩original
2019-11-27 10:00:455935parcourir

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn