近期在倒腾redis,虽然简单,但是还是记录下,防止以后忘记
环境:node+express+redis
一、安装redis需要用到的模块(此处省略node和express环境的构建)
cnpm install redis --save
cnpm install connect-redis --save
cnpm install express-session --save
cnpm install cookie-parser --save
二、增加代码如下
const cookieParser = require('cookie-parser');
app.use(cookieParser());
const expressSession = require('express-session');
const redis = require('redis');
const RedisStore = require('connect-redis')(expressSession);
// 创建Redis客户端
const redisClient = redis.createClient(
6379,
'127.0.0.1',
// {auth_pass: 'password'}
);
// 设置Express的Session存储中间件
app.use(
expressSession(
{
store:new RedisStore({client: redisClient}),
secret:'password',
resave:false,
saveUninitialized:false,
cookie:{
maxAge: 1000*60*5 // default session expiration is set to 1 hour
}
}
),
);
三、使用(直接给出两个接口,一个存储另一个读取。模仿用户登录,和判断用户是否为登录状态)
app.get('/set',(req,res)=>{
let name = req.query.name
if(!name || name==''){
res.send('name is require');
return;
}
//比如传了name='zs'此时会在redis里面存入zs:{name:'zs',login:true}
req.session[name] = {name, login:true};
res.send('login success Welcome to Server');
});
app.get('/get',(req,res)=>{
let name = req.query.name
if(!name || name==''){
res.send('name is require');
return;
}
let session = req.session;
console.log(session)//session里面包含了存储的所有内容
if(session[name] && session[name].login){
res.send('Welcome to Server');
}else{
res.send('no login');
}
})
这样你的Session就转移到了Redis数据库,这样做的一个额外好处是,当你的Express服务器突然重启后,用户仍然可以使用当前Cookie中的SessionID从数据库中获取到他的会话状态,做到会话不丢失,在一定程度上提高网站的键壮性。