PHP Memcache密钥过期

时间:2010-07-13 16:08:25

标签: php memcached

我不确定这是否可行。我在memcache服务器中存储了一些信息。我存储的memcache条目被假定为30分钟到期。在那30分钟内,我可以用相同的密钥更新该memcache条目引用的值。但是当我更新值时,我不想更改过期时间。例如:

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

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

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

BTW我使用的是memcache而不是memcached。

2 个答案:

答案 0 :(得分:3)

我知道这个问题已经过时了,但我认为我会对gprime的解决方案加以警惕。

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

(有关详细说明,请参阅http://sparklewise.com/?p=506。)

如果您的代码没有考虑先前存储的到期消失的可能性,则可能会出现问题。即使您确实考虑到了这一点,您最终也可能会在缓存中获得比预期更长的值。

在99.999%的情况下,这可能不是什么大不了的事,但它是其中之一,当它确实发生时会引起大量的毛发拉扯和头部刮伤。希望这篇文章可以帮助别人避免这种痛苦。 : - )

答案 1 :(得分:1)

基本上,Memcache完全符合您的要求。它完成了它的工作,获取和设置值...我认为你寻找的答案超出了memcache的默认功能。我想您可以对代码库进行更多控制,以检查存储在Blob中的时间戳,并使用它来设置未来更新的到期时间?

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