【问题标题】:PHP Memcache Key ExpirePHP Memcache 密钥过期
【发布时间】:2010-07-13 16:08:25
【问题描述】:

我不确定这是否可能。我在内存缓存服务器中存储了一些信息。我存储的内存缓存条目应该有 30 分钟的有效期。在这 30 分钟内,我可以通过相同的键更新该 memcache 条目引用的值。但是当我更新值时,我不想更改过期时间。例如:

  • 密钥已创建并设置为在 30 分钟后过期
  • 10 分钟过去了,请求键的值,我们更改值
  • 我使用 memcache replace 替换了他们键的值(我不提供新的过期时间,因为它是可选的),我希望过期时间为 30-10 = 20,因为密钥是在 10 分钟前创建的并且是设置为在 30 分钟后到期。
  • 现在由于我没有设置过期时间,所以它默认为 0,并且密钥永远不会过期。

现在,有没有办法在 memcache 中设置项目,设置过期时间,然后获取/替换项目,同时在我将项目设置在缓存中后将过期时间保持在 x 分钟?

我可能能够在设置到 memcache 时使用 unix 时间戳而不是秒来过期,并将该时间戳存储在 memcache 中,当我将其设置回 memcache 时,我只需将其设置为存储在值中的相同时间戳.或者有更好的方法吗?

顺便说一句,我使用的是内存缓存而不是内存缓存。

【问题讨论】:

    标签: php memcached


    【解决方案1】:

    我知道这个问题很老了,但我想我应该对 gprime 的解决方案加一点警告。

    听起来 gprime 的“丑陋小技巧”是将过期时间作为单独的值存储在内存缓存中。问题是,memcache 最终可能会在仍然需要到期值时清除它。即使分配给 memcached 的内存未满,也会发生这种情况。

    (更多解释请参见http://sparklewise.com/?p=506。)

    如果您的代码没有考虑到先前存储的过期时间已消失的可能性,这可能是一个问题。即使您确实考虑到了这一点,您最终可能会得到缓存中比预期更长的值。

    在 99.999% 的情况下,这可能不是什么大问题,但它确实是会导致大量拉扯头发和抓头的陷阱之一。希望这篇文章能帮助人们避免这种痛苦。 :-)

    【讨论】:

      【解决方案2】:

      基本上,Memcache 完全按照您的意愿行事。它的工作做得很好,获取和设置值......我认为您要寻找的答案超出了 memcache 的默认功能。我想您可以对代码库进行更多控制,以检查您与 blob 一起存储的时间戳,并使用它来设置未来更新的过期时间?

      我不知道您的非 memcache 一致存储使用什么,但我会在其中存储一个到期日期 - 然后使用该值来更新您的 memcache。

      【讨论】:

      • 是的,我只是要将过期的时间戳存储在 memecache 中,这样我可以在替换值时将过期设置回该值。我不想使用另一种类型的存储(如 sql db 或 nosql db)只是为了到期。我可以通过一些丑陋的 hack 在 memcache 中完成所有操作。但你是对的,memecache 做了它应该做的事情。谢谢!
      猜你喜欢
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      相关资源
      最近更新 更多