2014-02-11 54 views
3

我正在用nodejs,express和node_redis構建一個應用程序。我想創建一個模塊來封裝所有與redis相關的操作,這樣我就不必在任何地方處理redis密鑰。在nodejs中使用redis的最佳做法是什麼?

|- app.js 
|- models 
| |- db.js <-- All redis-related operations here 
..... 

然後我在這裏有兩個問題。

  1. 我想創建Redis的連接,然後選擇一個數據庫:

    var redis = require('redis'); 
    var client = redis.createClient(); 
    client.select(config.database, function() { 
        // actual db code 
    }); 
    

    由於select是一個異步調用,我怎麼能在一個單獨的模塊(db.js)使用它呢?

  2. 看起來像client.quite()必須在腳本結束之前調用,否則腳本不會退出。我怎樣才能在db.js之外做到這一點,而client被封裝爲db.js的局部變量?

回答

3

我建議做一些像定義接口的服務/資源庫/接口,然後調用它的方法。

例如,如果你有一個用戶數據庫:

var UserService=function(){ 
    this.client=new ... 
} 

UserService.prototype.getUserById=function(id, cb){ 
this.client.select(...,function(result,err){ 
    cb(result); 
} 
} 

UserService.prototype.... so on 

現在,在您的明確程序,你將創建一個UserService var和使用它。 當然,你應該創建更智能的UserService。 在UserService中,您可以添加緩存。

var app = express(); 
var userService = new UserService(); 
//... 

用於關閉閱讀:Do I need to quit

+0

感謝您的回答。我認爲在每個方法中放置客戶端'select'命令是一個好主意,但直接執行此操作會導致每次調用方法時發出'select'命令。可能一些可以重用當前連接的包裝可以。 – charlee

相關問題