Node.js redis会删除我以前的express.js会话吗?

Node.js redis会删除我以前的express.js会话吗?,node.js,express,redis,Node.js,Express,Redis,我正在使用redis作为node.js+express应用程序的会话存储…它会在旧会话过期后自动删除它们吗 …还是我需要在服务器端进行一些清理?(因此db不会增长太大) 是的,connectredis将使redis在会话过期时清除您的会话 如果我没记错的话,默认会话超时是24小时,这对我来说是一段相当长的时间来保持内存中的某些内容空闲,但是您可以给它一个ttl参数来配置(以秒为单位)在Redis过期之前您希望会话保持多长时间 如果你想确保Redis为你清理东西,只需将超时设置为30秒,并在超时过

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

…还是我需要在服务器端进行一些清理?(因此db不会增长太大)


是的,
connectredis
将使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
选项,并且有一些关于它如何与其他选项交互的小细节。

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

如果我将cookie设置为在2周内过期,它将在redis中生存14天

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

start redis-cli
> keys *
> ttl <key>
启动redis cli
>钥匙*
>ttl

我将cookie设置为2周后过期,我是否也需要将ttl更改为2周,这样它们就不会从redis中删除?@chovy是的,如果您真的希望redis将会话保留在内存中2周,您需要这样做。不过,您可能希望研究某种混合会话存储,将过去几个小时处于活动状态的会话保留在Redis中,并将其存储在磁盘上,以使会话空闲更长时间,这可能是一个节省一些内存的好主意。在第二个链接中,作者的意思是什么“添加了ttl选项,该选项位于cookie maxAge之前。现在会话ttl是(options.ttl,cookie.maxAge,oneDay),以先定义的为准。“--这是否意味着它也会将ttl设置为我设置的cookie.maxAge?@chovy我无法验证这一点,因为我没有在这台机器上设置东西,但他似乎在说,如果你不设置
ttl
,它将使用
cookie.maxAge
作为会话密钥ttl。在Redis中找到会话并进行验证应该是相当容易的,我从未将TTL调高,只是调低了,所以根据经验无法说话。非常确定24小时不是默认时间。我没有设置ttl,我在redis中看到了非常旧的键。
start redis-cli
> keys *
> ttl <key>