【发布时间】:2019-12-06 04:38:37
【问题描述】:
我正在阅读 Redis 会话驱动程序的源代码。在 gc 函数中,它返回 true 并表示 Redis 会处理这个问题。
redis 如何决定何时驱逐 sess_expiration = 0 的数据?当可以删除这些会话时,我不希望 redis 填满。
【问题讨论】:
标签: codeigniter redis
我正在阅读 Redis 会话驱动程序的源代码。在 gc 函数中,它返回 true 并表示 Redis 会处理这个问题。
redis 如何决定何时驱逐 sess_expiration = 0 的数据?当可以删除这些会话时,我不希望 redis 填满。
【问题讨论】:
标签: codeigniter redis
我对这个话题不是很熟悉,但我认为: redis 默认遵循特定的策略来管理你的会话。相应地:GC在会话信息之后保存一个默认的过期时间,以供下一个条目使用。这样做时,它会查看其配置(您是否创建了一个表来存储 Session?您应该何时保存它?)。
这使得自定义这部分成为可能。因此,您可以通过编写自己的处理程序来管理会话。如果需要,您可以将会话信息存储在任何地方,而无需将其带到数据库端(如 cookie)。您也可以设置自己的网络服务并从那里管理记住我的信息,这是另一种选择。
我的理解是,如果您将 sess_expiration 设置为 0,它将自行管理。否则,您可以设置一个较短的时间,例如 40 分钟,然后您可以使用 sintakonte 的玉米作业。 (我觉得没办法自己写GC,你可以像PK_Session那样自定义你的session handler)
【讨论】:
基本上说,你不会。
我们遇到了同样的问题 - 一种可能的方法是定义最长到期时间(例如 3、6、12 个月)。
此外,您可以跟踪上次访问会话的时间,并在定义的时间段后删除所有不活动的会话。
为此,您必须编写自己的 GC。 (我们安装了一个每 24 小时运行一次的 cron 作业)。
【讨论】: