2017年3月21日 星期二

node js 使用 redis 資料庫

1. 先安裝好 redis-server:
      sudo apt-get install redis-server
2. 編輯修改 redis 的設定: /etc/redis/redis.conf, 將 requirepass 這個註解取消, 並填上自行設定的密碼, 剛開始可以用  '123456' 來測試看是否運作正常, .之後記得要改掉.
3. 重新啟動 redis server:
     sudo /etc/init.d/redis-server stop
     sudo /etc/init.d/redis-server start
4. node js 是使用 createClient(port, host, auth_pass)  api 來連線
5. 為了避免非同步程式出現callback hell(輪迴地獄), 並讓程式看起來簡潔比較好理解一點,可以使用 bluebird 這隻 Promise 模組, 用 npm 就可以直接安裝, 用 require('bluebird') 導進程式後就可以使用了:
    npm install bluebird --save
6. 經過 promisifyAll 的 redis API 會帶有 Async 的尾綴詞,  是因為它都是非同步的API,  因此 .on() 須改為 .onAsync(), .get() 須改用 .getAsync(), .set() 須改用 .setAsync(), 當然原先 API 還是可以使用, 只不過程式寫起來會很累綴. 對於像是 , .on('error', console.log) 就可以直接顯示錯誤訊息,其實並不需要使用經 promisify 過的 API:

// redisTest.js
var Promise = require("bluebird");
var redis=Promise.promisifyAll(require("redis"));
var port=6379;
var host='127.0.0.1';
var auth_pass={auth_pass:'123456'};
var service=redis.createClient(port, host, auth_pass);

service.onAsync('ready').then( function() { // console.log('ready');
    service.getAsync('version').then(function(reply) {
        if( reply !== null ) { console.log(reply); return ; }
        service.setAsync('version','1.0.0.0').then(function(reply) {
            console.log(reply); // should be 'OK'
        })
    })
})

service.on("error",console.log);

沒有留言: