Какое максимальное время истечения ключа memcached?Максимальное время истечения ключа ключа Memcache
Если я не предоставил срок годности и кеш заполняется, что произойдет?
Какое максимальное время истечения ключа memcached?Максимальное время истечения ключа ключа Memcache
Если я не предоставил срок годности и кеш заполняется, что произойдет?
Вы можете установить срок действия ключа на дату, указав временную метку Unix вместо количества дней. Эта дата может быть более 30 дней в будущем:
Время истечения срока указывается в целых числах без знака. Их можно установить от 0, что означает «никогда не истекает», до 30 дней (60 * 60 * 24 * 30). В любое время более 30 дней интерпретируется как дата отметки времени unix. Если вы хотите закончить объект 1 января следующего года, так вы это сделаете.
https://github.com/memcached/memcached/wiki/Programming#expiration
Но as you say, если вы устанавливаете срок действия ключа на количество времени, а не даты, максимум 2,592,000 секунд, или 30 дней.
Если вы не предоставите истечения срока действия кэша и получает полный то старые ключевые значения истек первый:
памяти также отозваны, когда пришло время, чтобы сохранить новый элемент. Если нет свободных фрагментов и свободных страниц в соответствующем классе slab, memcached будет смотреть на конец LRU для элемента, который будет «возвращаться». Он будет искать последние несколько элементов в хвосте для того, который уже истек, и, следовательно, свободен для повторного использования. Если он не может найти истекший элемент, он будет «выселять» тот, который еще не истек. Затем это отмечено в нескольких статистических счетчиков
https://github.com/memcached/memcached/wiki/UserInternals#when-are-items-evicted
Вы на 100% уверены в этом? –
Да, @DeeJay ', просто нашел эту статью: http://code.google.com/p/memcached/wiki/NewUserInternals – Brett
'Память также исправлена, когда пришло время для хранения нового элемента. Если нет свободных фрагментов и свободных страниц в соответствующем классе slab, memcached будет смотреть на конец LRU для элемента, который будет «возвращаться». Он будет искать последние несколько элементов в хвосте для того, который уже истек, и, следовательно, свободен для повторного использования. Если он не может найти истекший элемент, он будет «выселять» тот, который еще не истек. Это затем отмечается в нескольких статистических счетчиках. « – Brett
ОК, я обнаружил, что число секунд, не может превышать 2592000 (30 дней). Таким образом, максимальное время истечения составляет 30 дней.
Нет, это не так. Количество секунд в форме * длительности * не может превышать 30 дней. Вы можете указать срок действия три месяца, если вы хотите как абсолютное время. Вы также можете указать 0, чтобы не было срока действия. – Dustin
Я также обнаружил, что если вы предоставляете слишком длительное время истечения срока действия, значение не сохраняется вообще. – Datageek
Я обнаружил, что 30 дней не работает (не пишет кеш), но 29 дней работает. – Zubin
Нет никаких ограничений. Ограничение на 30 дней - если вы укажете количество секунд, в течение которых оно должно оставаться там, но если вы укажете временную метку, на машине будет только максимальная длина или значение int, которое может быть предел.
->set('key', 'value', time() + 24*60*60*365)
сделает ключевое пребывание там в течение года, например, но если кеш заполняется или перезапускается между ними, это значение можно удалить.
Срок годности, в секундах. Может быть до 30 дней. Через 30 дней рассматривается как временная метка unix точной даты.
https://code.google.com/p/memcached/wiki/NewCommands#Standard_Protocol
На Laravel config.session.lifetime
установки, что, если установлено, чтобы быть эквивалентом 30days выше, будет рассматриваться как метку времени (это даст ошибку из 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
.
OMG. У нас было множество случаев в Rails of: expires_in => 1.month. Перейдите на 1.month.from_now, чтобы использовать дату. –
Ссылка, на которую ссылается, мертва :( – marcgg
@marcgg: aha да, хорошо замечен, спасибо. Исправлено. –