2012-09-23 55 views
9

我使用redis作为我的session.js + express应用程序的会话存储...它会在到期后自动删除旧会话吗?将redis删除我的旧express.js会话?

...或者我需要在服务器端做一些清理吗? (使DB不会增长太大)

var RedisStore = require('connect-redis')(express) 

    app.use(express.session({ 
    store: new RedisStore({ 
     host: cfg.redis.host, 
     db: cfg.redis.db 
    }), 
    secret: 'foobar' 
    })); 

回答

9

是,connect-redis会让Redis的清理您的会话时到期。

如果我没有记错的话,默认的会话超时是24小时,对我来说在相当长的时间内保持内存空闲,但你可以给它一个ttl参数来配置(以秒为单位)你需要多长时间在Redis到期前保留会话。

如果您想确保Redis能够为您清理所有问题,只需将超时设置为30秒,并在超时过期后查看Redis;

app.use(express.session({ 
    store: new RedisStore({ 
    host: cfg.redis.host, 
    db: cfg.redis.db, 
    ttl: 30 
    }), 
    secret: 'foobar' 
})); 

ttl选项被提及here并没有关于它如何与其他选项here交互的一些小的额外的细节。

+0

设置我的cookie 2周后到期,我需要改变TTL〜2周太,使他们不被删除了Redis的吗? – chovy

+0

@chovy是的,如果您真的希望Redis将会话保留在内存中2周,您需要这样做。尽管如此,您可能希望查看某种混合会话存储,将会话保留在Redis中,这些会话在过去的几个小时内一直处于活动状态,并将它们存储在磁盘上进行空闲时间比这更长的会话,这可能是保存一些内存的好主意。 –

+0

在第二个链接中,作者的意思是“添加了ttl选项,它位于cookie maxAge之前,现在session ttl是(options.ttl,cookie.maxAge,oneDay),无论哪个先定义。” - 这是否意味着它会将ttl设置为我设置cookie.maxAge的任何内容? – chovy

4

它按预期工作。如果我执行仅浏览器会话(当用户代理关闭时会过期cookie),那么它将在redis中保存24小时(我没有在connect-redis中设置ttl选项)。

如果我设置一个cookie在2周内过期,它将在redis中保存14天。

你可以用以下命令检查:

start redis-cli 
> keys * 
> ttl <key>