更新于

koa框22 扩展session redis

发布于 / 分类: Node / 暂无评论 / 阅读量: 63

使用mysql的话,虽然很稳定,但是相对读写来说,速度没有放在内存中快,于是我们可以使用redis

首先是安装

由于redis是针对linux的,window版本则是由微软小组进行转制作维护的,下载地址在github

redis

linux版直接官网下载,或者用宝塔直接装。

window版本的已经很老了,只有3.0,现在官网都6.0了,github是16年更新的。

找到一个非官方的版本,目前更新到5.0了

redis

下载zip文件,解压打开redis server即可。

使用

需要安装两个插件,一个是redis,一个是用于将redis的老方法转为新异步方法的插件bluebird

npm i redis bluebird
const redis = require("redis");
const bluebird = require("bluebird");

const client = redis.createClient({
    host: "localhost"
});
bluebird.promisifyAll(redis.RedisClient.prototype);

引入插件,然后redis先连接,由于没有设置用户名密码,所以只需要host连接本地。

然后调用bluebird的方法,将redis里面的方法prototype传入。

这样就完成了转换。

我们使用的话,依旧是使用session的三个生命周期。

get

async get(key, maxAge) { //获取
    let data = await client.getAsync(key);

    if (!data) return {};

    try {
        return JSON.parse(data);
    } catch (e) {
        return {};
    }
},

由于使用了转换,所有的redis的方法,原来是get的,要改为getAsync

由于redis有一个自动清理过期的特性,所以我们只需要判断有没有对应的session即可。

而且redis获取的数据,不是数组,而是一个字符,所以我们要对其进行JSON转换,如果能转换成功就返回,不能就返回一个空的。

set

设置话的,原来我们可能就使用:

await client.setAsync(key, JSON.stringify(session));

但是我们要使用redis的过期时间特性,要换一个方法

async set(key, session, maxAge) { //设置

    //设置过期时间和值
    await client.psetexAsync(key, maxAge, JSON.stringify(session));
},

这样就行了,使用psetexAsync方法,第一个参数为key,第二个为过期时间,毫秒单位,所以不用转换,第三个为要存储的session对象,由于只能存放字符,所以JSON转换。

destroy

async destroy(key) { //删除
      await client.delAsync(key);
    }

使用redis相对来说会非常简单,读写性能也很快。

但是由于是使用内存,所以服务器一重启,就什么都没了,所以redis还会在一定时间内将内容储存到磁盘里面,默认是300秒吧,所以如果在未存储时重启,那么资料就没了。

暂无评论

Info
站点信息

以前觉得活下去很难,现在发现活的好才难!

创建于20156

总共发表了327篇文章

共有545条评论

创建了21个分类目录

Archive
时间归档
Weather
天气

湿度
Catalog
目录树
设置
配色方案

布局