执行SET命令和保存的数据实际发生变化之间的延迟?

时间:2012-10-25 14:50:02

标签: redis

对于我正在构建的应用程序,我们使用Redis作为会话存储介质。

前几天,我们的一位测试人员注意到,当他退出然后立即尝试访问受保护的URI(在退出后大约1秒内)时,他的旧会话数据仍然存在使用

Stepified:

  1. 用户以帐号A登录。
  2. 用户退出。
  3. 用户立即访问受保护的URI。
  4. 用户再次以帐号A登录。
  5. 我认为发生的事情就是这样:

    1. 用户注销,因此应用程序会清除用户的会话并将空会话发送到Redis进行存储。
    2. 在更改“take”之前,用户访问不同的资源(例如,登录表单或受保护的URI)。
    3. 应用程序从Redis请求会话,该会话仍包含已登录的会话值。
    4. 应用程序将更新的会话发送回Redis,覆盖已注销的会话。
    5. 这是正确的诊断吗? Redis在接受SET和实际更新存储值之间有延迟吗?或者我应该在我的应用程序逻辑中调查某些内容?

1 个答案:

答案 0 :(得分:2)

执行SET命令没有延迟。如果redis-server成功返回,并且您的客户端库报告成功 - 您可以确定redis已写入数据。

我建议您查看应用程序堆栈。也许会话处理程序异步使会话失效?