Redis를 배우고 있으며 간단한 users
테이블로 작업하고 있습니다. 나는을 통해 레디 스와 상호 작용하고 있습니다. 사용자 조회 테이블에 Redis 사용
user_ids
1
2
그리고
user:1 username 'Guy One'
user:2 username 'Guy Two'
이 잘 작동 :이 시점에서 그래서
client = redis.createClient();
client.incr('user_count', function (err, reply) {
var new_user_id = reply;
client.lpush('user_ids', new_user_id);
client.hset('user:' + new_user_id, 'username', req.param('username'), redis.print);
client.quit();
res.redirect('/');
});
를, 내가 좋아하는 내 데이터베이스를 볼 것으로 예상 .하지만 지금 내가 붙어있는 것은 전체 사용자 테이블을 생성하는 것입니다. user_ids
을 반복하고 각각에 대해 해당 user
해시 항목을 추출합니다.
매우 비효율적 인 (각 사용자 키에 대한 개별 쿼리) 것 외에도이 접근법은 node_redis
getter 호출이 비동기 적으로 수행되기 때문에 문제가됩니다. 따라서 각 getter는 성공 콜백에서 다음 getter를 호출해야합니다. A 매우 중첩 콜백 게터의 긴 체인.
이
내가 처음 시도했던 것입니다 : 위에서 언급 한 바와 같이,뿐만 아니라 비효율적이지만 작동하지 않습니다,var usernamesList = new Array();
client.lrange('user_ids', 0, -1, function (err, reply) {
var userIdsList = (reply == null || reply == undefined) ? new Array() : reply;
for (var userId in userIdsList) {
usernamesList.push(client.hget('user:' + userId, 'username'));
}
res.render('users', { usernames: usernamesList });
});
을하지만 때문에 세 번째 매개 변수 (현재 존재하지 않는)에 hget()
있어서 실제로 등
다음 userIdsList
에서 다음 항목 hget()
호출해야 콜백, hget()
의 부울 값인 리턴 값이어야한다. 그래서 [true, true]
내 질문 :
이 수행 할 수있는 올바른 방법/건축가 전체 사용자 목록 및 조회 된 결과, 내 방법은 간단의 배열을 반환 위의 기록으로?
각
hget()
에 콜백이 필요하다는 사실을 어떻게 처리 할 수 있습니까? 모든 사용자 이상