获取php中memcache项的到期时间?

时间:2010-03-15 08:01:58

标签: php memcached

我在我的网站上缓存推文(有30分钟的到期时间)。当缓存为空时,要查找的第一个用户将重新填充它。

然而,当时Twitter API可能会返回200.在这种情况下,我想将之前的数据再延长30分钟。但以前的数据已经丢失了。

所以相反,我想考虑重新填充缓存,比如说,在到期时间前5分钟,这样我就不会丢失任何日期。

那么在使用php的memcache :: get()时如何知道项目的到期时间?

此外,还有更好的方法吗?

3 个答案:

答案 0 :(得分:5)

在这种情况下,这不是更好的逻辑吗?

  • 如果缓存超过30分钟,请尝试从Twitter
  • 如果成功检索到新数据,则覆盖缓存
  • 无限期缓存数据(或者比您打算缓存的时间长得多)
  • 请注意上次在单独的密钥中更新缓存(当前时间)
  • 冲洗,重复

关键是,只有用新东西替换数据,不要让旧数据自动丢弃。

答案 1 :(得分:1)

不要在memcached中存储关键数据。它什么都不保证。

如果您总是需要获得“最新的好”缓存 - 您需要将数据存储在任何持久存储中,例如数据库或平面文件。

在这种情况下,如果在缓存中找不到任何内容 - 请执行twitter api请求。如果失败 - 你从持久性中读取数据。在另一个http请求中,您将再次进行相同的迭代。

或者您可以将持久性数据从持久性存储到内存缓存中。几分钟,例如(1-5)让twitter服务器有时间变得健康。过期后 - 重复请求。

答案 2 :(得分:0)

当您将数据放入内存缓存时 - 您还要设置缓存有效的时间。所以理论上你也可以把创建缓存的时间和/或缓存过期时间。从缓存中获取后,您可以随时验证缓存过期所需的时间,并决定您要执行的操作。

但是让缓存在用户访问时重新填充在某些时候仍然存在风险 - 假设您希望在到期时间达到约5分钟之前重新填充缓存 - 并且突然之间没有访问者进入最后6缓存过期前的几分钟 - 然后缓存仍将过期,没有人会导致重新填充。如果您希望始终确保存在缓存条目 - 您需要定期进行检查 - 例如 - 制作一个执行缓存检查和填充的cronjob。