需求
在express中需要使用session时,我们常使用express-session,使用案例如下
var express = require('express')
var session = require('express-session')
var app = express()
app.use(session({
secret: 'keyboard cat',
cookie: { maxAge: 60000 }
}))
app.post('/', function(req, res, next){
req.session.userData = 'userData' //直接设置session的值,在http结束返回时会自动调用session的save方法进行保存
})
但是express-session
默认使用的是MemoryStore
进行存储,多用于开发环境,但是我们常常要将session存储在redis中,这时我们常使用connect-redis来配合
使用
connect-redis是一个快速、方便的redis连接库,需要redis >= 2.0.0
,安装如下
npm install connect-redis
和express-session
配合使用的案例如下
var express = require('express')
var session = require('express-session');
var RedisStore = require('connect-redis')(session);
var app = express()
app.use(session({
store: new RedisStore(redisOptions),
secret: 'keyboard cat',
cookie: { maxAge: 60000 }
}));
redisOptions
的主要选项如下
{
"host": "localhost",
"port": 6379,
"pass": "PASSWORD", //redis的密码
"prefix": "mysite:sess:", //key的前缀,默认为"sess:"
}
如果使用redis集群的话需要ioredis,使用如下,原文在这里
var express = require('express');
var app = express();
var session = require('express-session');
var RedisStore = require('connect-redis')(session);
var Redis = require('ioredis');
var redisClient = new Redis.Cluster([
{port: 6379, host: 'your-cluster-ip-1', password: 'password-for-6379'},//可以单独设置密码
{port: 6378, host: 'your-cluster-ip-2'},
{port: 6377, host: 'your-cluster-ip-3'},
{port: 6376, host: 'your-cluster-ip-4'}
], {
redisOptions: {
password: 'fallback-password' // 如果集群有密码保护,可以设置集群的密码
}
});
redisClient.on('error', function(err) { // 获取集群所有节点都失败的时候的错误信息
console.log('get cluster err message:', err)
})
app.use(session({
secret: 'redis-session-test',
store: new RedisStore({client: redisClient}),
resave: false,
saveUninitialized: true
}));
← pm2的使用