Node系列学习之Redis

949 阅读2分钟

这是我参与更文挑战的第17天,活动详情查看:更文挑战

为何Session适用于redis

  • session 访问频繁, 对性能要求极高
  • session 可不考虑断电丢失数据的问题
  • session 数据量不会太大( 相比于 MySQL 中存储的数据 )

Redis安装

可以看这个教程: www.runoob.com/redis/redis…

安装完成后在两个终端分别输入下面两条命令来启动 Redis, 记得在环境变量中加入Redis的安装路径~

redis-server
redis-cli

简单使用

redis-cli 的命令窗口:

set name tmier // 设置键值对
get myname	// 取值
keys * // 取出所有键名
del myname // 删除键值对

NodeJS 连接 Redis

1. 初始化文件夹

npm init -y

完成后新建index.js

2.安装redis依赖包

npm i redis

index.js

const redis = require('redis')
// 创建客户端

const redisClient = redis.createClient(6379, '127.0.0.1')
redisClient.on('error', err => {
  console.error(err);
})

// 测试
redisClient.set('myname','Tmier', redis.print)
redisClient.get('myname', (err,val) => {
  if(err) {
    console.error(err);
  }
  console.log('val', val);

  // 退出
  redisClient.quit()
})
output: 
Reply: OK
val Tmier

3. 封装工具函数

src/conf/db.js

const env = process.env.NODE_ENV // 获取环境参数
// 配置
let MYSQL_CONF
let REDIS_CONF

if (env == 'dev') {
  // mysql
  MYSQL_CONF = {
    host: 'localhost',
    user: 'root',
    password: 'wyf666...',
    port: '3306',
    database: 'myblog'
  }
  // redis
  REDIS_CONF = {
    port: 6379,
    host: '127.0.0.1'
  }
}
if (env == 'production') {
  MYSQL_CONF = {
    host: 'localhost',
    user: 'root',
    password: 'wyf666...',
    port: '3306',
    database: 'myblog'
  },
  // redis
  REDIS_CONF = {
    port: 6379,
    host: '127.0.0.1'
  }
}

module.exports = {
  MYSQL_CONF,
  REDIS_CONF
}

db/redis.js

const redis = require('redis')
const { REDIS_CONF } = require('../conf/db')

// 创建客户端
const redisClient = redis.createClient(REDIS_CONF.port, REDIS_CONF.host)
redisClient.on('error', err => {
  console.error(err)
})
function set(key, val) {
  if (typeof val == 'object') {
    val = JSON.stringify(val)
  }
  redisClient.set(key, val, redis.print)
}
function get(key) {
  return 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)
      }
    })
  })
}
module.exports = {
  set,
  get
}

封装完成, 暴露了 getset 方法,然后把 session 中的值存入就好了~

有感

一开始总是觉得nodejs链接数据库会很麻烦, 连接redis会很难搞, 学习MySQL和Redis会花费很多时间精力,但事实证明, 我确实把他们想的太难了, 不是说没有往深里学习的原因, 我现在学到的这个层次已经满足我的需求了, 我只是想能够自己写下接口, mockmock数据, 最好的话能够自己做一个博客,现在所学的已经满足了,当时就是想达到这么简单的需求都感觉会很难, ,一直推迟推迟..., 真的是有些事情我真的是把它们想的过于难了一旦真正进入状态开始搞,简直是势如破竹! 哈哈哈

后面的话会再学习KOA和Express, 有点期待呐~