복붙노트

[REDIS] 레디 스 약간의 OS에 버퍼가 아닌 다른 사람과 같은 문자열을 저장?

REDIS

레디 스 약간의 OS에 버퍼가 아닌 다른 사람과 같은 문자열을 저장?

우분투 11.10에 노드와 레디 스 2.2.11을 사용하고, 나는 문자열을 저장하고있어하지만이 버퍼로 반환합니다.

    id = 1234;
    console.log('data', data);
    client.hmset("user:" + id, "name", data['name'] );
    client.hmget('user:' + id, "name", function(err, d) {
        console.log('data retrieved', d);
    });

이 콘솔에서 다음을 생성합니다 :

data { name: 'RealServer' }
data retrieved [ <Buffer 41 6e 6e 61 52 65 61 6c 53 65 72 76 65 72> ]

왜 문자열로가는, 그리고 버퍼로 나오고? 버퍼는 매우 어려운 디버깅하게!

내 로컬 설치 (맥 OS 레디 스 2.2.14 10.6) 잘 문자열로 인쇄 검색된 데이터에. 나는 두 시스템에서 작업을 계속 해결책을 찾기 위해 싶습니다.

UPDATE : 그것은 또한에 CentOS 5.7에 지정된 인코딩없이 잘 작동합니다. 우분투이 뭔가 구체적인인가? 시스템 전체 수정이 있습니까?

해결법

  1. ==============================

    1.참조 : http://nodejs.org/docs/v0.3.1/api/buffers.html

    참조 : http://nodejs.org/docs/v0.3.1/api/buffers.html

    당신은 인코딩을 지정하지 않은 것 때문에, 기본적으로 원시 데이터로 표시됩니다. 당신은 표준 JS 문자열을 생산하는 buffer.toString를 사용할 수 있습니다.

  2. ==============================

    2.당신은 지정하지 않았습니다 년부터 그것을 밖으로 인쇄하는 동안 사용 인코딩 알고하지 않습니다 인코딩. paramater가 제대로 로그로 인코딩와의 toString 기능을 사용합니다.

    당신은 지정하지 않았습니다 년부터 그것을 밖으로 인쇄하는 동안 사용 인코딩 알고하지 않습니다 인코딩. paramater가 제대로 로그로 인코딩와의 toString 기능을 사용합니다.

    client.hmget('user:' + id, "name", function(err, d) {
        console.log('data retrieved', d.toString('utf8'));
    });
    
  3. from https://stackoverflow.com/questions/8329252/redis-saving-strings-as-buffers-on-some-oss-not-others by cc-by-sa and MIT license