목차
답글 내용:
백엔드 개발 PHP 튜토리얼 redis는 배열을 저장합니다(json_encode는 실패하고 직렬화는 성공합니다).

redis는 배열을 저장합니다(json_encode는 실패하고 직렬화는 성공합니다).

Oct 10, 2016 am 11:56 AM
php redis yii 은닉처

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에는 직렬화보다 더 효율적인 방법이 있습니다.
igbinary_serialize() 및
igbinary_unserialize()
이 두 가지 방법은 ibginary 모듈을 설치해야 합니다.
redis 사용 시 구성

<code>$reids-&gt;setOption(Redis::OPT_SERIALIZER,Redis::SERIALIZER_IGBINARY);
</code>
로그인 후 복사

Redis는 자동으로 직렬화합니다. 매번 직렬화하고 설정하는 대신, 가져올 때마다 역직렬화해야 합니다.

직렬화에 대해 PHP를 예로 들어

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

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

send2serverB($p);</code>
로그인 후 복사

서버 A에서 객체 인스턴스를 직렬화했고, 이 인스턴스를 서비스 B에서 사용해야 합니다
물론 서버 B에서도 정상적으로 역직렬화하려면 Person 클래스 선언이 필요합니다

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

데이터를 저장하거나 전송(소위 I/O)해야 하기 때문에 직렬화에 대한 이야기가 있습니다.
Json은 일반적으로 사용되는 데이터 스트림 형식이지만 메타데이터만 저장할 수 있고 복잡한 개체 속성을 표현할 수는 없습니다. 및 방법

데이터는 utf8이어야 합니다.
gbk는 인코딩할 수 없습니다

즉, json_encode는 객체를 직렬화할 수 없습니다

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Dec 24, 2024 pm 04:42 PM

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드

CakePHP 프로젝트 구성 CakePHP 프로젝트 구성 Sep 10, 2024 pm 05:25 PM

CakePHP 프로젝트 구성

CakePHP 날짜 및 시간 CakePHP 날짜 및 시간 Sep 10, 2024 pm 05:27 PM

CakePHP 날짜 및 시간

CakePHP 파일 업로드 CakePHP 파일 업로드 Sep 10, 2024 pm 05:27 PM

CakePHP 파일 업로드

CakePHP 라우팅 CakePHP 라우팅 Sep 10, 2024 pm 05:25 PM

CakePHP 라우팅

CakePHP 토론 CakePHP 토론 Sep 10, 2024 pm 05:28 PM

CakePHP 토론

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 Dec 20, 2024 am 11:31 AM

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법

CakePHP 빠른 가이드 CakePHP 빠른 가이드 Sep 10, 2024 pm 05:27 PM

CakePHP 빠른 가이드

See all articles