redis做session必须得有断开重连机制。
发布于 3个月前 作者 okoala 503 次浏览 来自 分享

官方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 同问。

没理由不自动重连吧?

@fantasyni @alsotang

我用的是connect-redis 之前也以为会重连,但是我发现并没有

    self.client.on('error', function () { self.emit('disconnect'); });

看了下代码,它只是做了事件推送,并没有做任何处理。

@fantasyni 不是redis client 而是connect-redis 这个模块disconnected~~

@okoala 他disconnected 就是底层的 redis client 抛上来的

回到顶部