何时从数据库删除过期的行



对于我当前的Web项目,我需要将短期访问令牌存储在PostgreSQL表中。我有两个选择实施令牌到期的选择:

  1. 对用户进行身份验证时,请确保令牌未过期,例如通过执行SELECT * FROM access_token WHERE key = '...' AND CURTIME() < expires_at;。删除大块在与cron的Web应用程序中独立于大块中的令牌或类似的内容。

    PROS:更快的身份验证,总的查询较少。

    cons:需要调度程序或外部工具,因此一个更复杂的项目。

  2. 在每个身份验证之前,运行DELETE FROM access_token WHERE CURTIME() >= expires_at;。然后SELECT令牌,前提是它仍然存在。

    PROS:更简单,更易于实现,累积了较少过期的令牌。

    cons:更多查询,可能对单个用户进行更长的身份验证(例如,停机后的第一个用户(。

还有其他解决方案吗?哪一个被认为是最佳实践?

当您谈论最佳实践时,重要的是首先考虑您已经说过的权衡,但是第一个选择是适当的

但是,这就是我接近情况的方式

认证用户检查令牌是否过期,则可以自动删除已过期令牌的触发器。这就是我要处理情况的方式,这就是我看到的情况。这似乎很复杂,但最后您会收获回报。

再次,其他人可能有不同的看法,这只是我的2美分。

最新更新