手记

【备战春招】第11天 在 Node 中操作 Redis

课程章节第3章 技术选型和知识点介绍(下) 3-1 3-2 3-3

课程讲师双越

课程内容

Redis 是一个使用 ANSI C 编写的开源、支持网络、基于内存、可选持久性键值对存储数据库。 Redis 不是一个简单的 Key-Value 数据库,它还支持多种数据结构。Redis 是内存数据库,数据都存放在内存中,读写效率都很高,常用来做缓存。

Nodejs 中使用一个模块来操作 Redis 数据库,先安装依赖:

yarn add redis

配置 Redis 数据库的连接信息:

const REDIS_CONF = {
    host: '127.0.0.1',
    port: 6379 // redis 数据库的默认端口号是 6379
  }
}

module.exports = {
  REDIS_CONF
}

使用 redis 模块连接到数据库:

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

// 创建客户端
const client = redis.createClient(REDIS_CONF.prot, REDIS_CONF.host)

// 监听连接状况
redisClient.on("error", function (err) {
  console.log("Error " + err);
});

对于常用的取值操作,设置值操作,做一个简单的封装,方便后续的使用:

/**
 * redis set
 * @param {string} key key
 * @param {string} val val
 * @param {number} time 过期时间,单位:s
 */
function set(key, val, timeout=60*60) {
  if(typeof val === 'object') {
    // 如果传入的val是对象,要进行序列化
    val = JSON.stringify(val);
  }

  redisClient.set(key, val);
  // 设置过期时间
  redisClient.expire(key, timeout);
}

/**
 * redis get
 * @param {string} key 
 * @returns {Promise} promise
 */
function get(key) {
  // Redis官方提供的redis sdk使用回调函数处理异步,我们将其封装为promise的形式
  return new Promise((resolve, reject) => {
    redisClient.get(key, (err, val) => {
      if(err) {
        reject(err);
        return;
      }

      if(val == null) {
        // 没有查询到key,可能是过期了
        resolve(null); 
        return;
      }

      try {
        // 如果存储的key的对应的val是Object类型的,需要反序列化
        resolve(JSON.parse(val))
      } catch(ex) {
        // 如果反序列化失败,就直接返回查询到的值
        resolve(val);
      }
    })
  })
}

module.exports = {
  get,
  set
}

使用 Redis 时大部分场景都是使用 get 和 set,和在命令行中操作 Redis 一致。

课程收获

这节课学习了在 Node.js 中通过 redis 模块来连接和操作 Redis 数据库的方法,非常简单。

0人推荐
随时随地看视频
慕课网APP