redis会删除我的旧express.js会话吗?

cho*_*ovy 10 redis node.js express

我正在使用redis作为node.js + express app的会话存储...它会在过期后自动删除旧会话吗?

...或者我是否需要在服务器端进行一些清理?(所以db不会变得太大)

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

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

Joa*_*son 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'
}));
Run Code Online (Sandbox Code Playgroud)

ttl选项被提及这里并没有关于它如何与其他选项进行交互一些小的额外的细节在这里.


cho*_*ovy 5

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

如果我将 cookie 设置为 2 周后过期,它会在 redis 中保存 14 天。

您可以使用以下命令进行检查:

start redis-cli
> keys *
> ttl <key>
Run Code Online (Sandbox Code Playgroud)