nodejs連接redis數據庫的簡單封裝

因項目用到而寫,先摘錄下來,以備參考:

const fs       = require('fs')
const path     = require('path')
const redis    = require("redis");
const basePath = path.resolve('./')

/* 
 * 注意:如果redis-server與nodejs客戶端都在本地,下列可寫成
 * client = _redis.createClient();否則要對括號內容進行更改 
 */
const   client = redis.createClient(6379,'127.0.0.1');//括號內容對應:(端口號,主機) 
client.on("ready", function (err) {  
    console.log("ready :" , "yes"); //鏈接成功檢測
}); 
client.on("error", function (err) {  
    console.log("Error :" , err);  //錯誤檢測
});    

module.exports = (function () {
    var mod = {};
    mod.webSet = function(res, _key, value, cb){  
        client.set(_key, JSON.stringify(value), function(err, result){  
            if (err) {                
                fs.writeFile(`${basePath}/logs/sqlerr.log`, err, () => {})
                res.json({
                    code: 500,
                    data: err
                })  
            } else {  
                if (cb) {
                    cb(result)
                } else {
                    res.json({
                        code: 200,
                        data: result
                    })
                } 
            }
        }) 
    };
    mod.webGet = function(res, _key, cb){  
        client.get(_key, function(err, result){  
            if (err) {  
                fs.writeFile(`${basePath}/logs/sqlerr.log`, err, () => {})
                res.json({
                    code: 500,
                    data: err
                })  
            } else {
              if (cb) {
                  cb(JSON.parse(result))
              } else {
                  res.json({
                      code: 200,
                      data: JSON.parse(result)
                  })
              } 
            }
        })  
    };
    mod.set = function (_key, value, cb) {
      client.set(_key, JSON.stringify(value), function (err, result) {
        if (err) {
          fs.writeFile(`${basePath}/logs/sqlerr.log`, err, () => {})
          cb && cb()
        } else {
          cb && cb(result);          
        }
      })
    };
    mod.get = function (_key, cb) {
      client.get(_key, function (err, result) {
        if (err) {
          console.log(err);
          fs.writeFile(`${basePath}/logs/sqlerr.log`, err, () => {})
          cb && cb();
        } else {
          cb && cb(JSON.parse(result));          
        }
      })
    };

    return mod     
})()
// 測試代碼
// redis.set("swim","2012039210213",new Date().getTime(),function(result){
//   console.log(result)//存入的狀態,正常則爲 "OK"
// })
// redis.get("swim",function(result){
//   console.log(result)//取出的值
// })




  /*
   * 一下爲redis消息通訊機制的應用代碼
   */
  let sub = redis.createClient(6379, '127.0.0.1'); // 監聽消費者
  let pub = redis.createClient(6379, '127.0.0.1'); // 生產者

  // 在sub開始監聽時允許觸發subscribe事件進行操作,類似連接數據庫的connect事件
  sub.on('subscribe', function (channel, count) {
      console.log(`${channel}:${count}`); //  test channel:1
      pub.publish('test channel', 'channel message test')
  })
  sub.on('message', function (channel, message) {
      console.log(`${channel}-message:${JSON.stringify(message)}`)
  })
  sub.subscribe('test channel');


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章