Heim  >  Artikel  >  Datenbank  >  Kann Redis Objekte speichern?

Kann Redis Objekte speichern?

anonymity
anonymityOriginal
2019-06-04 16:25:012962Durchsuche

Redis kann Objekte speichern, aber Serialisierung und Deserialisierung sind erforderlich.

Kann Redis Objekte speichern?

Warum die Serialisierungsschnittstelle implementieren?

Wenn eine Klasse die Serializable-Schnittstelle implementiert (diese Schnittstelle ist nur eine Markierungsschnittstelle und enthält keine Methodendefinitionen), bedeutet dies, dass die Klasse serialisiert werden kann Klasse, die die Serializable-Schnittstelle in ein Objekt implementiert, das in eine Bytesequenz konvertiert werden kann. Speichern Sie die Bytefolge (z. B. in einer Datei), und Sie können die Bytefolge später jederzeit im Originalobjekt wiederherstellen. Die Bytesequenz kann sogar auf andere Computer übertragen oder zur Wiederherstellung über das Netzwerk an andere Computer übertragen werden. Solange die entsprechende Klasse auf der Computerplattform vorhanden ist, kann sie normal auf das ursprüngliche Objekt zurückgesetzt werden. Implementierung: Um ein Objekt zu serialisieren, müssen Sie zunächst einige OutputStream-Objekte erstellen, diese dann in ein ObjectOutputStream-Objekt kapseln und dann die Methode writeObject() aufrufen, um ein Objekt zu serialisieren.

Hinweis: Wenn Sie einen Objektstrom zum Schreiben in eine Datei verwenden, muss nicht nur das Objekt serialisiert werden, sondern auch die Mitgliedsobjekte des Objekts müssen serialisiert werden

Über die Klasse des Serializable Schnittstelle serialVersionUID:

serialVersionUID ist vom langen Typ. In Eclipse gibt es zwei Generierungsmethoden:

Der Standardwert ist 1L:

private static final long serialVersionUID = 1L;

Die andere basiert auf dem Klassennamen und der Schnittstelle Name, Mitgliedsmethoden und -attribute usw. generieren ein 64-Bit-Hash-Feld:

private static final long serialVersionUID = 3969438177161438988L;

serialVersionUID dient hauptsächlich dazu, das Kompatibilitätsproblem der Objektdeserialisierung zu lösen.

Wenn serialVersionUID nicht angegeben wird, wird das Feld der Klasse vergrößert oder verkleinert, nachdem das Objekt serialisiert und auf der Festplatte gespeichert wurde. Auf diese Weise tritt beim Deserialisieren eine Ausnahme auf, die zu Inkompatibilitätsproblemen führt.

Aber wenn die serialVersionUID gleich ist, werden verschiedene Felder mit dem Standardwert „type“ deserialisiert. Auf diese Weise können Sie Inkompatibilitätsprobleme vermeiden.

Die obige Methode kann nur für Java-Objekte wiederhergestellt werden (z. B. C++-Objekte), Sie müssen die Java-Objekte in das XML-Format konvertieren, damit sie von verschiedenen verwendet werden können Plattformen und verschiedene Sprachverwendungen. Sie können die mit dem JDK verteilten javax.xam.*-Klassenbibliotheken oder die Open-Source-XOM-Klassenbibliothek verwenden (kann von www.xom.nu heruntergeladen und dokumentiert werden).

Experimenteller Fall:

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import bean.Person;
import redis.clients.jedis.Jedis;
public class SerializeUtil {
    public static void main(String [] args){
        Jedis jedis = new Jedis("172.16.135.2");
        String keys = "name";
        // 删数据
        //jedis.del(keys);
        // 存数据
        jedis.set(keys, "zy");
        // 取数据
        String value = jedis.get(keys);
        System.out.println(value);
        
        //存对象
        Person p=new Person();  //peson类记得实现序列化接口 Serializable
        p.setAge(20);
        p.setName("姚波");
        p.setId(1);
        jedis.set("person".getBytes(), serialize(p));
        byte[] byt=jedis.get("person".getBytes());
        Object obj=unserizlize(byt);
        if(obj instanceof Person){
            System.out.println(obj);
        }
    }
    
    //序列化 
    public static byte [] serialize(Object obj){
        ObjectOutputStream obi=null;
        ByteArrayOutputStream bai=null;
        try {
            bai=new ByteArrayOutputStream();
            obi=new ObjectOutputStream(bai);
            obi.writeObject(obj);
            byte[] byt=bai.toByteArray();
            return byt;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    
    //反序列化
    public static Object unserizlize(byte[] byt){
        ObjectInputStream oii=null;
        ByteArrayInputStream bis=null;
        bis=new ByteArrayInputStream(byt);
        try {
            oii=new ObjectInputStream(bis);
            Object obj=oii.readObject();
            return obj;
        } catch (Exception e) {
            
            e.printStackTrace();
        }
    
        
        return null;
    }
}

Das obige ist der detaillierte Inhalt vonKann Redis Objekte speichern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn