Heim > Backend-Entwicklung > PHP-Tutorial > Redis speichert das Array (json_encode ist nicht erfolgreich, Serialisierung ist erfolgreich)

Redis speichert das Array (json_encode ist nicht erfolgreich, Serialisierung ist erfolgreich)

WBOY
Freigeben: 2016-10-10 11:56:24
Original
2102 Leute haben es durchsucht

Um Redis zum Speichern von Arrays zu verwenden, speichern Sie diese im String-Typ.
Verwenden Sie PHPs eigenen json_encode und json_decode, um in JSON zu konvertieren (fehlgeschlagen).
PHPs eigene Serialisierungsfunktionen serialisieren und deserialisieren Funktionen (erfolgreich).
Gibt es spezifische Unterschiede? Kann mir jemand die Prinzipien von Erfolg und Misserfolg erklären?

Antwortinhalt:

Um Redis zum Speichern von Arrays zu verwenden, speichern Sie diese im String-Typ.
Verwenden Sie PHPs eigenen json_encode und json_decode, um in JSON zu konvertieren (fehlgeschlagen).
PHPs eigene Serialisierungsfunktionen serialisieren und deserialisieren Funktionen (erfolgreich).
Gibt es spezifische Unterschiede? Kann mir jemand die Prinzipien von Erfolg und Misserfolg erklären?

Es scheint nicht viel mit Redis zu tun zu haben. Die JSON-Strings von set und get sollten konsistent sein.

Sie können die Zeichenfolge von json_encode und das Ergebnis von json_decode direkt ausdrucken, um es anzuzeigen.

Ich denke, es ist möglich, dass json_decode($str, true) als json_decode($str) ohne Parameter geschrieben wird, was dazu führt, dass das Ergebnis ein Objekt statt eines Arrays ist.

Serialisierung und JSON sind nicht grundsätzlich dasselbe, JSON ist ein Datenformat

Serialisierung bezieht sich auf die Konvertierung von Datenobjekten in der laufenden Umgebung in Stream-Daten, sodass diese in einer Datei gespeichert oder zur Verwendung über das Netzwerk an andere Orte übertragen werden können.
Nach der Deserialisierung werden diese Stream-Daten wiederhergestellt die Sprachdatenobjekte unter
Jede Sprache hat ihre eigene Serialisierungsmethode

PHP verfügt über eine effizientere Methode als Serialize, nämlich
igbinary_serialize() und
igbinary_unserialize()
Diese beiden Methoden müssen das ibginary-Modul installieren
Konfiguration bei Verwendung von Redis

<code>$reids->setOption(Redis::OPT_SERIALIZER,Redis::SERIALIZER_IGBINARY);
</code>
Nach dem Login kopieren

Redis serialisiert automatisch. Anstatt jedes Mal zu serialisieren und dann festzulegen, müssen Sie nach jedem Abruf deserialisieren

Nehmen Sie PHP als Beispiel für die Serialisierung

<code>class Person{
    private $_name = "default";
    public function get_name(){
        return $this->_name;
    }
}

$p = new Person;
$sp = serialize($p);

send2serverB($p);</code>
Nach dem Login kopieren

Sie haben eine Objektinstanz in Server A serialisiert und müssen die Instanz in Dienst B verwenden.
Natürlich muss auch Server B über eine Deklaration der Klasse Person verfügen, um sie normal zu deserialisieren.

<code>function recieve_handle($sp){
   $p = unserialize($p);
   // 反序列后, 能还原Person实例, 能使用实例的方法
   // json只是种保存元数据的格式, 无法保存对象
   $name = $p->get_name();
}</code>
Nach dem Login kopieren

Da Daten gespeichert oder übertragen werden müssen (sog. I/O), spricht man von Serialisierung
Json ist ein häufig verwendetes Datenstromformat, das jedoch nur Metadaten speichern und keine komplexen Objektattribute ausdrücken kann. und Methoden

Beachten Sie, dass die Daten utf8 sein müssen,
GBK kann nicht codiert werden

Das heißt, json_encode kann keine Objekte serialisieren

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage