ホームページ  >  記事  >  バックエンド開発  >  redis は配列を保存します (json_encode は失敗し、シリアル化は成功しました)

redis は配列を保存します (json_encode は失敗し、シリアル化は成功しました)

WBOY
WBOYオリジナル
2016-10-10 11:56:242050ブラウズ

配列を保存するには Redis を使用し、文字列型で保存します。
PHP 独自の json_encode と json_decode を使用して json に変換します (失敗)。
PHP 独自のシリアル化関数は、関数をシリアル化およびシリアル化解除します (成功)。
具体的な違いはありますか?誰か成功と失敗の原則を教えてくれませんか?

返信内容:

配列を保存するには Redis を使用し、文字列型で保存します。

PHP 独自の json_encode と json_decode を使用して json に変換します (失敗)。
PHP 独自のシリアル化関数は、関数をシリアル化およびシリアル化解除します (成功)。
具体的な違いはありますか?誰か成功と失敗の原則を教えてくれませんか?

それはredisとはあまり関係がないようです。 set と get の JSON 文字列は一貫している必要があります。

の結果を直接印刷して確認することができます。

おそらく json_encode 的字符串直接 json_decode で、結果が配列ではなくオブジェクトになるのではないかと思います。

json_decode($str, true) 少了参数写成 json_decode($str)シリアル化と JSON は本質的に同じものではなく、JSON はデータ形式です

シリアル化とは、実行環境内のデータ オブジェクトをストリーム データに変換して、ファイルに保存したり、他の場所で使用できるようにネットワーク経由で送信したりすることを指します。

逆シリアル化後、このストリーム データは言語のデータ オブジェクトに復元されます。すべての言語には独自のシリアル化メソッドがあります

php には、serialize より効率的なメソッドがあります。それは、
igbinary_serialize() と
igbinary_unserialize() です

これら 2 つのメソッドは、ibginary モジュールをインストールする必要があります

redis を使用する場合の構成
リーリー
Redis は、毎回シリアル化してから設定するのではなく、取得が完了するたびに逆シリアル化するのではなく、自動的にシリアル化します

シリアル化については、PHPを例にして説明します

リーリー

サーバー A でオブジェクト インスタンスをシリアル化したので、そのインスタンスをサービス B で使用する必要があります

もちろん、サーバー B も通常どおり逆シリアル化するために、クラス Person の宣言が必要です

リーリー

データを保存または送信する必要があるため (いわゆる I/O)、シリアル化が必要です。

Json は一般的に使用されるデータ ストリーム形式ですが、メタデータのみを保存でき、複雑なオブジェクトのプロパティやメソッドを表現できません。

データは utf8 である必要があることに注意してください。

gbk はエンコードできません

json_encode がオブジェクトをシリアル化できないだけです

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。