Heim >Backend-Entwicklung >PHP-Tutorial >Redis speichert das Array (json_encode ist nicht erfolgreich, Serialisierung ist erfolgreich)
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?
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>
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>
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>
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