我不确定这是否可行。我在memcache服务器中存储了一些信息。我存储的memcache条目被假定为30分钟到期。在那30分钟内,我可以用相同的密钥更新该memcache条目引用的值。但是当我更新值时,我不想更改过期时间。例如:
现在,有没有办法在memcache中设置项目,设置过期时间,然后获取/替换项目,同时在将项目设置为缓存后将过期时间保持为x分钟?
我可能能够在设置到memcache时使用unix时间戳而不是秒来到期,并且还将该时间戳存储在memcache中,当我将其设置回memcache时,我只需将其设置为存储在值中的相同时间戳。或者有更好的方法吗?
BTW我使用的是memcache而不是memcached。
答案 0 :(得分:3)
我知道这个问题已经过时了,但我认为我会对gprime的解决方案加以警惕。
听起来像gprime的“丑陋的黑客”是将expiration作为单独的值存储在memcache中。问题是,memcache最终可能会在需要时清除到期值。即使分配给memcached的内存未满,也会发生这种情况。
(有关详细说明,请参阅http://sparklewise.com/?p=506。)
如果您的代码没有考虑先前存储的到期消失的可能性,则可能会出现问题。即使您确实考虑到了这一点,您最终也可能会在缓存中获得比预期更长的值。
在99.999%的情况下,这可能不是什么大不了的事,但它是其中之一,当它确实发生时会引起大量的毛发拉扯和头部刮伤。希望这篇文章可以帮助别人避免这种痛苦。 : - )
答案 1 :(得分:1)
基本上,Memcache完全符合您的要求。它完成了它的工作,获取和设置值...我认为你寻找的答案超出了memcache的默认功能。我想您可以对代码库进行更多控制,以检查存储在Blob中的时间戳,并使用它来设置未来更新的到期时间?
我不知道你的非memcache一致存储使用了什么,但我会在其中存储一个到期日期 - 然后使用该值来更新你的memcache。