2014-07-21 2 views
0

node_redis으로 응용 프로그램을 설정했으며 간단한 get/set을 작동 시키려고합니다.node_redis와 함께 node.js 응용 프로그램에 redis를 사용하여 캐시 키가 있는지 확인하십시오.

캐시에 삽입 할 수있는 것 같지만 키가 있는지 확인하고 싶습니다.

C#에서 나는 다음과 같은 것을 할 것입니다 : if(Cache["mykey"] == null).

수표는 어떻게 만듭니 까? if(!client.get[cacheKey]) {을 어떻게 바꿀 수 있습니까?

내 코드 :

app.get('/users',function(req,res) { 
    var cacheKey = 'userKey'; 

    if(!client.get[cacheKey]) { 
      mongoose.model('users').find(function(err,users) { 
       console.log('Setting cache: ' + cacheKey); 
       client.set(cacheKey,users,redis.print); 
       res.send(users); 
     }); 
    } else { 
     console.log('Getting from cache: ' + cacheKey); 
     return client.get[cacheKey]; 
    } 
}); 

답변

1

가장 중요한 것은 여기서주의해야할는 레디 스 클라이언트 노드에있는 대부분의 다른 것들처럼, 동기되지 않는 것입니다.

client.get에 액세스하는 방식은 자바 스크립트로 배열 된 것을 의미합니다. 실제로는 mongoose.find과 같은 함수로 마지막 매개 변수로 콜백이 필요합니다. 이 경우 먼저 cacheKey을 전달하면됩니다. if 절이 콜백 내부에 있습니다.

client.get(cacheKey, function(err, data) { 
    // data is null if the key doesn't exist 
    if(err || data === null) { 
     mongoose.model('users').find(function(err,users) { 
      console.log('Setting cache: ' + cacheKey); 
      client.set(cacheKey,users,redis.print); 
      res.send(users); 
     }); 
    } else { 
     return data; 
    } 
}); 

if 문을 동기식으로 처리 한 코드가있는 경우 콜백 함수에 포함되어야합니다.

관련 문제