redis做session必须得有断开重连机制。
官方demo是这样:
app.use(session({
store: new RedisStore(options),
secret: 'keyboard cat'
}));
其实应该要这样:
var sessionMiddleware;
var createMiddlware = _.throttle(function() {
var store = new RedisStore(redisConfig);
store.on('disconnect', function() {
createMiddlware();
});
app.set('sessionStore', store);
settings.store = store;
sessionMiddleware = session(settings);
}, 2000);
createMiddlware();
return function(req, res, next) {
sessionMiddleware.apply(this, arguments);
}
Node.js有些坑很隐蔽,一不小心就很容易掉下去~~
7 回复
这个redis client本身就会做重连的把
哇哈哈
@fantasyni 同问。
没理由不自动重连吧?
我用的是connect-redis 之前也以为会重连,但是我发现并没有
self.client.on('error', function () { self.emit('disconnect'); });
看了下代码,它只是做了事件推送,并没有做任何处理。
@fantasyni 不是redis client 而是connect-redis 这个模块disconnected~~
@okoala 他disconnected 就是底层的 redis client 抛上来的