11

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

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

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

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

2 回答 2

10

是的,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这里提到了这些选项,这里还有一些关于它如何与其他选项交互的额外细节

于 2012-09-23T06:32:59.410 回答
5

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

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

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

start redis-cli
> keys *
> ttl <key>
于 2012-09-23T07:13:33.057 回答