Memcache最大密钥到期时间

什么是memcached的最大密钥到期时间?

如果我没有提供到期时间并且caching满了,会发生什么情况?

您可以通过提供Unix时间戳而不是天数来将密钥到期设置为date。 这个date将来可能会超过30天:

到期时间以无符号整数秒指定。 它们可以从0(意为“永不过期”)设置为30天(60 * 60 * 24 * 30)。 超过30天的时间被解释为unix时间戳date。 如果你想在明年1月1日到期,那么你就是这样做的。

https://github.com/memcached/memcached/wiki/Programming#expiration

但是, 正如你所说 ,如果你设定的关键到期时间,而不是一个date,最多2,592,000秒,或30天。

如果您没有提供到期时间并且caching满了,那么最早的键值将首先到期:

内存也是回收的时候存储一个新的项目。 如果没有空闲块,并且在相应的slab类中没有空闲页面,则memcached将查看LRU的结尾以便“回收”一个项目。 它将search尾部的最后几个项目,这个项目已经过期,因此可以重复使用。 如果它找不到一个过期的项目,它将“驱逐”一个还没有过期的项目。 然后在几个统计柜台上注意到这一点

https://github.com/memcached/memcached/wiki/UserInternals#when-are-items-evicted

没有没有限制。 30天的限制是,如果你给它的秒数,它应该停留在那里,但如果你给一个时间戳,那么在机器上只有最大的long或者int值,这可能是一个限制。

->set('key', 'value', time() + 24*60*60*365)会使密钥停留在那里一年,但是如果caching变满或者在两者之间重新启动,可以删除。

到期时间,以秒为单位。 可以长达30天。 30天之后,将被视为确切date的unix时间戳。

https://code.google.com/p/memcached/wiki/NewCommands#Standard_Protocol

好的,我发现秒数不能超过2592000(30天)。 所以最大的到期时间是30天。

在laravel config.session.lifetime设置,如果设置为等于30天以上,将被视为时间戳(如果使用memcached每次都会出现token mismatch的错误)。

要回答,memcached过期可以随时设置。 (Laravel的默认设置(5.0版本)会将你设置为一个已经过期的时间戳)。 如果你没有设置,将使用defualt。

看起来有些答案不再有效。

当TTL太高时,我发现一个密钥根本就没有设置。 例如2992553564

testing以下PHP代码:

 var_dump($memcached->set($id, "hello", 2992553564); // true var_dump($memcached->get($id)); // empty! var_dump($memcached->set($id, "hello", 500); // true var_dump($memcached->get($id)); // "hello" 

版本是memcached 1.4.14-0ubuntu9