跳到主要内容
CNode

redis做session必须得有断开重连机制。

分享
Ookoala发布于 12 年前最后回复 12 年前
7152340

官方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)

F
fantasyni#712 年前
引用 okoala@fantasyni 不是redis client 而是connect redis 这个模块disconnected

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

O
okoala#612 年前
引用 fantasyni@okoala redis 本来就断开重连的 看

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

O
okoala#412 年前
引用 fantasyni这个redis client本身就会做重连的把

@fantasyni @alsotang

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

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

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

A
alsotang#312 年前
引用 fantasyni这个redis client本身就会做重连的把

@fantasyni 同问。

没理由不自动重连吧?

I
i5ting#212 年前

哇哈哈

F
fantasyni#112 年前

这个redis client本身就会做重连的把

参与回复

登录后即可参与回复。登录