Подтвердить что ты не робот

Максимальное время истечения ключа Memcache

Какое время истечения максимального времени ключа кэширования?

Если я не предоставляю время истечения срока действия и кеш заполняется, что происходит?

4b9b3361

Ответ 1

Вы можете установить истечение срока действия ключа на дату, указав временную метку Unix вместо количества дней. Эта дата может быть более 30 дней в будущем:

Время истечения задается в целых числах без знака. Их можно установить от 0, что означает "никогда не истекает", до 30 дней (60 * 60 * 24 * 30). В любое время более 30 дней интерпретируется как дата отметки времени unix. Если вы хотите закончить объект 1 января следующего года, вот как вы это делаете.

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

Но, как вы говорите, если вы истекаете срок действия ключа на некоторое время, а не дату, максимум составляет 2,592,000 секунд или 30 дней.

Ответ 2

Если вы не предоставите срок действия и кеш заполняется, то старшие значения ключа истекли:

Память также восстанавливается, когда требуется время для хранения нового элемента. Если нет свободных фрагментов и свободных страниц в соответствующем классе slab, memcached будет смотреть на конец LRU для элемента, который будет "возвращаться". Он будет искать последние несколько элементов в хвосте для того, который уже истек, и, следовательно, свободен для повторного использования. Если он не может найти истекший элемент, он будет "выселять" тот, который еще не истек. Затем это отмечено в нескольких статистических счетчиках

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

Ответ 3

Нет никаких ограничений. Ограничение на 30 дней - если вы укажете количество секунд, которое оно должно оставаться там, но если вы укажете отметку времени, на машине будет только максимальная длина или значение int. Это может быть предел.

->set('key', 'value', time() + 24*60*60*365) заставит ключ оставаться там в течение года, например, но да, если кеш заполняется или перезапускается между ними, это значение можно удалить.

Ответ 5

ОК, я узнал, что количество секунд не может превышать 2592000 (30 дней). Таким образом, максимальное время истечения составляет 30 дней.

Ответ 6

В настройке laravel config.session.lifetime, которая, если она установлена ​​в качестве эквивалента 30 дней выше, будет считаться временной меткой (это будет приводить к ошибке token mismatch каждый раз при условии, что используется memcached).

Чтобы ответить, истечение срока действия memcached можно установить в любое время. (Настройка по умолчанию Laravel (в версии 5.0) установит вам временную метку с истекшим сроком действия). Если вы его не установили, будет использоваться defualt.

Ответ 7

Похоже, что некоторые ответы больше не действительны.

Я узнал, что ключ не устанавливается вообще, когда 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.