近期在倒騰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從數據庫中獲取到他的會話狀態,做到會話不丟失,在一定程度上提高網站的鍵壯性。