使用nodeJs操作redis - 封装promise

配置文件:RedisOptions.js

const options = {
  host: '208.167.233.104',
  port: 15001,
  password: '123456',
  detect_buffers: true // 传入buffer 返回也是buffer 否则会转换成String
}
 
module.exports = options

封装redis操作:RedisConfig.js 需要安装redis的npm包 (3.0.2)

const redis = require('redis')
const redisOptions = require('./RedisOptions')
 
const options = {
  host: redisOptions.host,
  port: redisOptions.port,
  password: redisOptions.password,
  detect_buffers: redisOptions.detect_buffers, // 传入buffer 返回也是buffer 否则会转换成String
  retry_strategy: function (options) {
    // 重连机制
    if (options.error && options.error.code === "ECONNREFUSED") {
      // End reconnecting on a specific error and flush all commands with
      // a individual error
      return new Error("The server refused the connection");
    }
    if (options.total_retry_time > 1000 * 60 * 60) {
      // End reconnecting after a specific timeout and flush all commands
      // with a individual error
      return new Error("Retry time exhausted");
    }
    if (options.attempt > 10) {
      // End reconnecting with built in error
      return undefined;
    }
    // reconnect after
    return Math.min(options.attempt * 100, 3000);
  }
}
 
// 生成redis的client
const client = redis.createClient(options)
 
// 存储值
const setValue = (key, value) => {
  if (typeof value === 'string') {
    client.set(key, value)
  } else if (typeof value === 'object') {
    for (let item in value) {
      client.hmset(key, item, value[item],redis.print)
    }
  }
}
 
// 获取string
const getValue = (key) => {
  return new Promise((resolve, reject) => {
    client.get(key, (err, res) => {
      if (err) {
        reject(err)
      }else{
        resolve(res)
      }
    })
  })
}
 
// 获取hash
const getHValue = (key) => {
  return new Promise((resolve, reject) => {
    client.hgetall(key, function (err, value) {
      if (err) {
        reject(err)
      } else {
        resolve(value)
      }
    })
  })
}
 
// 导出
module.exports = {
  setValue,
  getValue,
  getHValue
} 

使用:test.js

const redis = require('./RedisConfig')
 
redis.setValue('student', {
  name: 'xiaoming',
  age: 18,
  sex: 1
})
 
redis.setValue('book', 'yuwen')
 
redis.getValue('book').then(res => {
  console.log(res)
}).catch(err => {
  throw new Error(err)
})
 
redis.getHValue('student').then(res => {
  console.log(res)
}).catch(err => {
  throw new Error(err)
})