koa框22 扩展session redis
使用mysql的话,虽然很稳定,但是相对读写来说,速度没有放在内存中快,于是我们可以使用redis
首先是安装
由于redis是针对linux的,window版本则是由微软小组进行转制作维护的,下载地址在github
linux版直接官网下载,或者用宝塔直接装。
window版本的已经很老了,只有3.0,现在官网都6.0了,github是16年更新的。
找到一个非官方的版本,目前更新到5.0了
下载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秒吧,所以如果在未存储时重启,那么资料就没了。
本文系作者 @木灵鱼儿 原创发布在木灵鱼儿站点。未经许可,禁止转载。
暂无评论数据