NodeJS访问和操作MySql和Redis数据库

MySql和Redis的区别和使用场景

首先MySql是基于硬盘的数据库,而Redis是基于内存的数据库,硬件上的差异天然的造就出了他们具有不同的特点和使用场景

  1. 硬盘的硬件成本低,而内存的硬件成本高。因此MySql更适合应用于体积较大数据的存储。
  2. 内存的访问速度快,而硬盘的访问速度慢,所以相较于基于硬盘存储的MySql,Redis性能更高,更适合应用于需要高频次大量IO的场景。
  3. 相较于基于内存存储的Redis,MySql更容易进行断电恢复和数据找回,而Redis的相关操作所需要的成本则相对较高。
  4. 记录结构的不同:MySql是标准的关系型数据库,数据记录基于行(rows)列(columns)存储,而redis是key-value数据库。记录格式相对松散。

因此Redis更适合处理类似于登录和session的相关存储和操作

使用NodeJS连接MySql

  1. 使用NPM安装mysql库
    npm install --save mysql
  2. 连接mysql
const mysql = require('mysql')

// 编辑配置,创建MySql连接
const connection = mysql.createConnection({
  host: 'localhost',  // 主机名
  user: 'root', // mysql服务用户名
  password: 'admin',  // mysql用户密码
  port: 3306, // mysql服务的端口号
  database: 'myblog'  // 要连接的数据库名称
})

// 开始连接
connection.connect()

// 执行查询语句
const sql = `select * from users;`
// 使用回调函数处理查询结果
connection.query(sql, (err, result) => {
  if (err) {
    console.error(err)
    return
  }
  console.log(result)
})

connection.end()

使用NodeJS连接Redis

  1. 使用NPM安装redis库
    npm install --save redis
  2. 连接redis
const redis = require('redis')

// 创建redis客户端
const redisClient = redis.createClient(6379, '127.0.0.1')
redisClient.on('error', err => {
  console.error(err)
  return
})

// 测试——设置redis记录
redisClient.set('myname', 'Frank', redis.print)
// 测试——查询redis记录
redisClient.get('myname', (err, val) => {
  if (err) {
    console.error(err)
    return
  }
  console.log(val)

  // 退出
  redisClient.quit()
})

在NodeJS项目中集成MySql和Redis

  1. 创建配置文件config/db.js
const env = process.env.NODE_ENV  // 环境变量

// 配置
let MYSQL_CONF
let REDIS_CONF

// 为开发环境添加配置
if (env === 'dev') {
  MYSQL_CONF = {
    host: 'localhost',
    user: 'root',
    password: 'admin',
    port: '3306',
    database: 'myblog'
  }
  REDIS_CONF = {
    host: '127.0.0.1',
    port: 6379
  }
} 

// 根据需要,为生产环境添加配置
if (env === 'prod') {
  MYSQL_CONF = {},
  REDIS_CONF = {}
}

module.exports = {
  MYSQL_CONF,
  REDIS_CONF
}
  1. 创建db/mysql.js,将MySql集成到项目中。
const mysql = require('mysql')
const { MYSQL_CONF } = require('../config/db')

// 创建连接对象
const connection = mysql.createConnection(MYSQL_CONF)

// 开始连接
connection.connect()

// 统一执行 sql 的函数
function exec(sql) {
  const promise = new Promise((resolve, reject) => {
    connection.query(sql, (err, result) => {
      if (err) {
        reject(err)
        return
      }
      resolve(result)
    })
  })

  return promise  
}

module.exports = {
  exec
}
  1. 创建db/redis.js,将redis集成到项目中。
const {REDIS_CONF} = require('../config/db')
const redis = require('redis')

const redisClient = redis.createClient(REDIS_CONF.port, REDIS_CONF.host)
redisClient.on('error', err => {
  console.error(err)
  return
})

function set(key, val) {
  if (typeof val === 'object') {
    val = JSON.stringify(val)
  }
  redisClient.set(key, val)
}

function get(key) {
  const promise = new Promise((resolve, reject) => {
    redisClient.get(key, (err, val) => {
      if (err) {
        reject(err)
        return
      }
      if (val == null) {
        resolve(null)
        return
      }
      try {
        resolve(
          JSON.parse(val)
        )
      } catch (error) {
        resolve(val)
      }
    })
  })
  return promise
}

module.exports = {
  get,
  set
}

你可能感兴趣的:(NodeJS访问和操作MySql和Redis数据库)