CNode

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

分享
Ookoala发布于12 年前最后回复12 年前7 回复15204 浏览0 收藏

官方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#1·12 年前

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

I
i5ting#2·12 年前

哇哈哈

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

@fantasyni 同问。

没理由不自动重连吧?

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

@fantasyni @alsotang

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

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

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

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

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

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

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

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