2014-09-28 6 views
0

30 분 밖에 걸리지 않고 Redis를 처음 사용했습니다. 노드 -REDIS 패키지를 사용하여 웹 앱을 구축하고 있습니다. 웹 페이지의 데이터를 저장하는 데 사용할 최상의 데이터 구조가 해시 일 것이라고 생각하지만 전체 앱에서 어떤 웹 페이지가 있는지 추적해야합니다. 그래서 내가 뭘하는지입니다 :/myURL이 나를 위해이 작업을 수행 할 수있는 세트에 단일 통화가 : 해시의 값을 다시 설정하여 저장합니다.

//this is in Redis-CLI 
//add the page and it's data to a hash 
HMSET pages:/myurl url /myurl title myTitle description myDescription content myContent lang_mirror /frenchurl 

//then I add the page to my set 
sadd pages pages:/myurl 

지금은 페이지 내부의 값을 반환 할

? 아니면 노드 리디스에 내장 된 무언가가이 작업을 수행합니까?

과 같이 명령 HGETALL을 사용하여에

답변

1

봐 : SORT보고 있지만, 복잡성 및 메모리 풋 프린트 마음 아, 그래서 :

127.0.0.1:6379> HMSET pages:/myurl url /myurl title myTitle description myDescription content myContent lang_mirror /frenchurl 
OK 
127.0.0.1:6379> SADD pages pages:/myurl 
(integer) 1 
127.0.0.1:6379> SORT pages BY nosort GET *->url GET *->title GET *->description GET *->content GET *->lang_mirror 
1) "/myurl" 
2) "myTitle" 
3) "myDescription" 
4) "myContent" 
5) "/frenchurl" 

HGETALL pages:/myurl 

편집 주석을 기반으로 주의 깊게 살펴보면 Lua 서버 측 스크립팅을 사용할 수있다.

+0

나는 그것을 보았지만, 나는 필요한 것을하지 못했다./myurl, pages :/myurl2, pages :/myurl3 등을 하나의 호출로 모두 가져올 수 있어야합니다. 그래서 모든 페이지 해시를 하나의 세트에 넣고 싶었습니다. –

+0

이해 - 더 적절한 제안으로 수정 :) –

0

최소한 2 회의 전화를 걸어야합니다. 하나는 집합의 구성원을 얻고 다른 하나는 모든 해시를 가져 오려면 여기에 node-redis를 사용하는 몇 가지 샘플 코드가 있습니다.

redis.smembers('pages', function(err, pages) { 
    var multi = redis.multi(); 
    for(var i=0; i<pages.length; ++i) { 
     multi.hgetall(pages[i]); 
    } 

    multi.exec(function(err, pageData) { 
     console.log(pageData); 
    }); 
});