0
点赞
收藏
分享

微信扫一扫

Nodejs中的redis的二次封装配置以及redis详解

进击的包籽 2022-03-26 阅读 78

前言

在我们的日常的项目开发中redis是我们常用的一种的缓存共享机制,它对数据的处理速度比从数据库中查询要快很多,而且可以在不同的场景下实现资源的共享。

1. 什么是Redis

Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。Redis全称为:Remote Dictionary Server(远程数据服务),该软件使用C语言编写,Redis是一个key-value存储系统,它支持丰富的数据类型,如:string、list、set、zset(sorted set)、hash。

2. Redis特点

Redis以内存作为数据存储介质,所以读写数据的效率极高,远远超过数据库。以设置和获取一个256字节字符串为例,它的读取速度可高达110000次/s,写速度高达81000次/s。

Redis跟memcache不同的是,储存在Redis中的数据是持久化的,断电或重启后,数据也不会丢失。因为Redis的存储分为内存存储、磁盘存储和log文件三部分,重启后,Redis可以从磁盘重新将数据加载到内存中,这些可以通过配置文件对其进行配置,正因为这样,Redis才能实现持久化。

Redis支持主从模式,可以配置集群,这样更利于支撑起大型的项目,这也是Redis的一大亮点。

3. Redis应用场景,它能做什么

众多语言都支持Redis,因为Redis交换数据快,所以在服务器中常用来存储一些需要频繁调取的数据,这样可以大大节省系统直接读取磁盘来获得数据的I/O开销,更重要的是可以极大提升速度。

拿大型网站来举个例子,比如a网站首页一天有100万人访问,其中有一个板块为推荐新闻。要是直接从数据库查询,那么一天就要多消耗100万次数据库请求。上面已经说过,Redis支持丰富的数据类型,所以这完全可以用Redis来完成,将这种热点数据存到Redis(内存)中,要用的时候,直接从内存取,极大的提高了速度和节约了服务器的开销。

步入正题

我们已经简单的了解了什么是redis,那么我们接下来就开始咱们的redis配置

首先安装依赖

npm i redis -S

然后开始咱们的自定义配置

/*
 * @Author: zhizhuo 
 * @Date: 2022-03-02 17:43:04 
 * @Last Modified by: zhizhuo
 * @Last Modified time: 2022-03-25 13:19:37
 */

const redis = require("redis");

const client = redis.createClient({
    host: "127.0.0.1",	//	redis地址
    port: 6379, // 端口号
    legacyMode: true	//redis4必须有这个,官方文档这么说的不然前面的session存储不进去
})
// 监听连接事件
client.on("connect", error => {
    if (!error) {
        console.log("connect to redis success")
    }
})
// 监听错误事件
client.on("error", error => {
    throw new Error(error)
})
//设置redies的储存方法
function setString(key, value, expire) {
    return new Promise((resolve, reject) => {
        client.set(key, value, (error, replay) => {
            if (error) {
                reject("设置失败")
            }
            if (expire) {
                client.expire(key, expire);
            }
            resolve("设置成功")
        });
    })
}
//设置redis的获取的方法
function getString(key) {
    return new Promise((resolve, reject) => {
        if (key) {
            client.get(key, (error, replay) => {
                if (error) {
                    reject(`获取${key}失败`)
                }
                resolve(replay);
            })
        }
    })
}

module.exports = {
    setString,
    getString,
    client
}

这里我为什么导出client呢,如果我们在项目中使用了session就可以直接导入配置使用,session和redis的配置需要安装

npm install redis connect-redis express-session 或 yarn add redis connect-redis express-session
const session = require("express-session")
let RedisStore = require("connect-redis")(session)

// redis@v4
const { createClient } = require("redis")
let redisClient = createClient({ legacyMode: true })
redisClient.connect().catch(console.error)

// redis@v3
const { createClient } = require("redis")
let redisClient = createClient()

// ioredis
const Redis = require("ioredis")
let redisClient = new Redis()

app.use(
  session({
    store: new RedisStore({ client: redisClient }),
    saveUninitialized: false,
    secret: "keyboard cat",
    resave: false,
  })
)

上面的是官方配置,下一篇文章我们在讲解session在项目中的自定义使用

好了,我们的自定义配置完成了,封装了getString和setString,分别对应的是设置redis储存和读取redis中的信息,这里要注意了这个是一个异步的数据,我的个人习惯是使用async+await来接受这个数据。

使用set方法也就是储存的时候我们要传送3个参数,一个是键值一个内容一个是时间(单位是秒),我们取值的时候我们只需要传送参数键值就可以取出来我们想要的数据,为什么设置时间呢,这样是因为当我们的数据时间过期之后他就可以自动清除掉,不占用过多的内容,这里就可以和上一篇文章的设置限制单手机号每日最大获取验证码的次数。

如果本篇文章对您有帮助请点个赞或关注谢谢

举报

相关推荐

0 条评论