我转过几个弯 绕过那个小雨楼
拿着蒲扇摆着衣衫渡着紧箍咒
不问天涯不停留 喝过几壶酒
不过年少白头道义放胸口
倘若明天之后 遥看前尘剑封侯
似那天上神仙无所求
朝朝暮暮君如梦醒十分不为何理由
是真是假是惶恐是无休
路过这风雨花满楼 片刻都不停留
我本这书生进京赶考留下许多愁
你问有没有时候 我叹这天道默悠悠
能否与我一醉方休
又过了几个弯 算尽天量道莫慌
踏这田园闻这芳草香
跌跌撞撞仗剑天涯折煞不枉无笔良
是梦是幻是温柔是家乡
路过这风雨花满楼 片刻都不停留
我本这书生进京赶考留下许多愁
你问有没有时候 我叹这天道默悠悠
能否与我一醉方休
路过这风雨花满楼 片刻都不停留
我本这书生进京赶考留下许多愁
你问有没有时候 我叹这天道默悠悠
能否与我一醉方休
谁能与我一醉方休
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秒吧,所以如果在未存储时重启,那么资料就没了。
评论(0)