Какое время истечения максимального времени ключа кэширования?
Если я не предоставляю время истечения срока действия и кеш заполняется, что происходит?
Какое время истечения максимального времени ключа кэширования?
Если я не предоставляю время истечения срока действия и кеш заполняется, что происходит?
Вы можете установить истечение срока действия ключа на дату, указав временную метку Unix вместо количества дней. Эта дата может быть более 30 дней в будущем:
Время истечения задается в целых числах без знака. Их можно установить от 0, что означает "никогда не истекает", до 30 дней (60 * 60 * 24 * 30). В любое время более 30 дней интерпретируется как дата отметки времени unix. Если вы хотите закончить объект 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 дней - если вы укажете количество секунд, которое оно должно оставаться там, но если вы укажете отметку времени, на машине будет только максимальная длина или значение int. Это может быть предел.
->set('key', 'value', time() + 24*60*60*365)
заставит ключ оставаться там в течение года, например, но да, если кеш заполняется или перезапускается между ними, это значение можно удалить.
Время истечения, в секундах. Может быть до 30 дней. Через 30 дней, обрабатывается как временная метка unix точной даты.
https://code.google.com/p/memcached/wiki/NewCommands#Standard_Protocol
ОК, я узнал, что количество секунд не может превышать 2592000 (30 дней). Таким образом, максимальное время истечения составляет 30 дней.
В настройке laravel config.session.lifetime
, которая, если она установлена в качестве эквивалента 30 дней выше, будет считаться временной меткой (это будет приводить к ошибке token mismatch
каждый раз при условии, что используется memcached
).
Чтобы ответить, истечение срока действия memcached можно установить в любое время. (Настройка по умолчанию Laravel (в версии 5.0) установит вам временную метку с истекшим сроком действия). Если вы его не установили, будет использоваться defualt.
Похоже, что некоторые ответы больше не действительны.
Я узнал, что ключ не устанавливается вообще, когда 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
.