美文网首页
NodeJS访问和操作MySql和Redis数据库

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

作者: v刺猬v | 来源:发表于2019-03-15 10:05 被阅读0次

    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数据库

          本文链接:https://www.haomeiwen.com/subject/usxcmqtx.html