Максимальное время истечения срока действия ключа Memcache - PullRequest
44 голосов
/ 13 сентября 2009

Какое максимальное время действия ключа memcached?

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

Ответы [ 7 ]

51 голосов
/ 02 декабря 2009

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

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

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

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

16 голосов
/ 13 сентября 2009

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

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

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

10 голосов
/ 02 августа 2011

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

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

3 голосов
/ 30 июня 2014

Время истечения, в секундах. Может быть до 30 дней. Через 30 дней обрабатывается как метка времени Unix точной даты.

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

1 голос
/ 31 мая 2017

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

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

1 голос
/ 16 сентября 2009

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

0 голосов
/ 29 марта 2017

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...