代码之家  ›  专栏  ›  技术社区  ›  Jonatan Littke Yukiup

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

  •  4
  • Jonatan Littke Yukiup  · 技术社区  · 15 年前

    我正在我的网站上缓存tweets(有效期为30分钟)。当缓存为空时,第一个发现的用户将重新填充它。

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

    因此,我希望在到期前5分钟重新填充缓存,这样我就不会丢失任何日期。

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

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

    3 回复  |  直到 15 年前
        1
  •  5
  •   deceze    15 年前

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

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

    关键是,只有当你有新的数据时,才用新的数据替换它,不要让旧的数据被自动丢弃。

        2
  •  1
  •   zerkms    15 年前

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

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

    在这种情况下,如果在缓存中找不到任何东西,那么就执行twitter api请求。如果失败了-您从Persistent读取数据。在另一个HTTP请求上,您将再次进行相同的迭代。

    或者,您可以将持久性数据放入memcache中,使其具有相当短的生命周期。比如说几分钟(1-5分钟),让Twitter服务器有时间恢复健康。过期后-重复请求。

        3
  •  0
  •   Laimoncijus    15 年前

    当您将数据放入memcache时,您还将设置缓存的有效时间。因此,理论上,您还可以将创建缓存的时间和/或缓存将到期的时间放在一起。稍后,从缓存中提取之后,您始终可以验证到缓存过期还有多长时间,并决定要做什么。

    但是让缓存在用户访问时重新填充在某种程度上仍然是有风险的——比如说,如果您希望在缓存在到期时间前达到大约5分钟时重新填充缓存——并且突然之间,在缓存到期前的最后6分钟内将没有访问者到来——那么缓存仍然会在没有人会让它重新填充。如果您希望始终确保缓存项存在-您需要定期进行检查-例如-生成一个执行缓存检查和填充的cronjob。