Memcache最大密钥到期时间

时间:2009-09-13 17:36:23

标签: memcached

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

如果我没有提供过期时间并且缓存已满,那么会发生什么?

7 个答案:

答案 0 :(得分:51)

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

  

到期时间以无符号整数秒指定。它们可以设置为0,表示“永不过期”,设置为30天(60 * 60 * 24 * 30)。任何高于30天的时间都被解释为unix时间戳日期。如果你想在明年1月1日到期一个对象,你就是这样做的。

     

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

但是,as you say,如果您将密钥过期设置为一段时间而非日期,则最长为2,592,000秒,或30天。

答案 1 :(得分:16)

如果您未提供过期且缓存已满,则最早的键值将首先过期:

  

当存储新项目时,也会回收内存。如果没有空闲块,并且在相应的slab类中没有空闲页面,则memcached将查看LRU的末尾以查找“回收”项目。它将在尾部的最后几个项目中搜索已经过期的项目,因此可以重复使用。但是,如果找不到过期的项目,它将“逐出”尚未过期的项目。然后在几个统计计数器中注意到这一点

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

答案 2 :(得分:10)

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

例如,

->set('key', 'value', time() + 24*60*60*365)会使密钥停留一年,但是如果缓存已满或重新启动,则可以删除此值。

答案 3 :(得分:3)

  

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

     

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

看起来某些答案已无效。

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

使用以下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

答案 6 :(得分:0)

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

要回答,可以随时设置memcached expiration。 (Laravel的默认设置(在v5.0上)将设置为已过期的时间戳)。如果你没有设置它,将使用defualt。

相关问题