[REDIS] 레디 스에서 중첩 된 자바 스크립트 객체를 저장 - NodeJS를
REDIS레디 스에서 중첩 된 자바 스크립트 객체를 저장 - NodeJS를
나는 최근에 nodejs에서 레디 스에 memcached를로 전환. 노드에 memcached에 좋아 일이 내가 메모리에 전체 자바 스크립트 객체를 저장할 수 있었다. 슬프게도 나는 레디 스에서이 작업을 수행 할 수 없었다. 예를 들어, 나는 다음과 같은 목적을 가지고 :
var obj = {
name: "Hello world!",
author: "admin",
user: {
"yolololo" : {
"id": "352asdsafaseww",
"server": 5,
"data" : {
x: 1,
y: 1,
z: 50
}
},
"yolol" : {
"id": "358dsa",
"server": 7
}
}
}
3 - 에덴 / 노드 memcached를 함께 난 그냥 할 수 :
memcached.set("obj", obj, 12345, function(err) { });
그리고
memcached.get("obj", function(err, data) {
console.log(data);
});
그리고 객체 I, 그것은 단지 길을 저장할 수 있습니다.
레디 스에 대한 문제는이 같은 개체를 저장하는 경우이다 :
redisclient.set("obj", obj, redis.print);
내가 가진 값을 얻을 때
redisclient.get("obj", function(err, data) {
console.log(data);
});
출력은 [개체 개체 함유하는 막 문자열이다.
내가 레디 스를 이해 그래 텍스트 기반 프로토콜이며)는 obj.toString을 (수행하려고하지만, 그렇지 않은 객체와 레디 스의 memcached를 돌봐 보인다. 난 그냥 할 수 있다고 생각 :
redisClient.set("obj", JSON.stringify(obj));
JSON를 OBJ> 문자열 병목한다면 미친 높은 I가있을 것이기 때문에 이것은 좋은 것입니다하지만 만약 내가하지 확신 / O와 잘 모르겠어요 (10,000 + 요청 / 초).
Memcached가와 레디 스 모두 문자열로 데이터를 저장하지만, 레디 스가 내장되어 않는 기능 객체를 변환?
해결법
-
==============================
1.우선 레디 스의 다음과 같은 데이터 유형을 지원합니다 :
우선 레디 스의 다음과 같은 데이터 유형을 지원합니다 :
당신은 레디 스 및 memcached를 모두 문자열로 개체를 저장해야합니다.
노드는 memcached를 파싱 / 자동 데이터 stringifies. 그러나 노드 레디 스하지 않습니다.
그러나, 당신은 당신의 응용 프로그램에 대한 자신의 직렬화 / 역 직렬화 기능을 구현할 수 있습니다.
다음과 같은 방법으로 노드-memcached를 stringifies 객체는 다음과 같습니다
if (Buffer.isBuffer(value)) { flag = FLAG_BINARY; value = value.toString('binary'); } else if (valuetype === 'number') { flag = FLAG_NUMERIC; value = value.toString(); } else if (valuetype !== 'string') { flag = FLAG_JSON; value = JSON.stringify(value); }
또한 검색된 텍스트이 방법을 구문 분석 :
switch (flag) { case FLAG_JSON: dataSet = JSON.parse(dataSet); break; case FLAG_NUMERIC: dataSet = +dataSet; break; case FLAG_BINARY: tmp = new Buffer(dataSet.length); tmp.write(dataSet, 0, 'binary'); dataSet = tmp; break; }
from https://stackoverflow.com/questions/18942089/storing-nested-javascript-objects-in-redis-nodejs by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 메모리와 CPU 스파이크 레디 스 (0) | 2020.01.07 |
---|---|
[REDIS] 명령 줄에서 종료 레디 스 서버 (0) | 2020.01.07 |
[REDIS] jedis를 사용하여 레디 스에 연결할 수 없습니다 (0) | 2020.01.07 |
[REDIS] 노드 애플 리케이션 사이에 공유 세션? (0) | 2020.01.07 |
[REDIS] 자바 스크립트 디자인 패턴 - 원치 않는 비동기 다루기 (0) | 2020.01.07 |