什么是memcached的最大密钥到期时间?
如果我没有提供到期时间并且缓存已满,那么会发生什么?
您可以通过提供Unix时间戳而不是天数来将密钥到期日期设置为日期.此日期将来可能超过30天:
到期时间以无符号整数秒指定.它们可以设置为0,表示"永不过期",设置为30天(60*60*24*30).任何高于30天的时间都被解释为unix时间戳日期.如果你想在明年1月1日到期一个对象,你就是这样做的.
https://github.com/memcached/memcached/wiki/Programming#expiration
但是,正如您所说,如果您将密钥过期设置为一段时间而不是一个日期,则最大值为2,592,000秒或30天.
如果您未提供过期并且缓存已满,则最早的键值将首先过期:
在存储新项目时还会回收内存.如果没有空闲块,并且在相应的slab类中没有空闲页面,则memcached将查看LRU的末尾以查找"回收"项目.它将在尾部的最后几个项目中搜索已经过期的项目,因此可以重复使用.但是,如果找不到过期的项目,它将"逐出"尚未过期的项目.然后在几个统计计数器中注意到这一点
https://github.com/memcached/memcached/wiki/UserInternals#when-are-items-evicted
没有限制.30天的限制是你给它应该留在那里的秒数,但是如果你给出一个时间戳,那么机器上只有max long或int值可以是一个限制.
->set('key', 'value', time() + 24*60*60*365)
例如,密钥会在那里停留一年,但是如果缓存已满或在两者之间重新启动,则可以删除此值.