Настройка сессии Memcache+PHP: Как кэш-память истекает ключи?

Единственная причина, которую я могу отобразить, почему восстановление постепенно замедлялось бы, индексирует. Исследуйте выключение индексации до конца и затем позвольте ему сделать всех сразу.

7
задан 16 December 2011 в 03:31
1 ответ

Мы тоже столкнулись с этим, но смогли разобраться в это и точно выяснить, что происходит. Симптомы, с которыми мы столкнулись, заключались в том, что кэш памяти (с достаточно большим распределением памяти, работающим на нескольких серверах) начал вытеснять контент. Это нежелательно, так как может отрицательно сказаться на текущих посетителях сайта.

Контролируя сетевой трафик, мы увидели следующие сообщения от PHP к Memcache:

set memc.sess.key.abcdabcdabcdabcdabcdabcd 0 0 1823 data .. .

Это второй ноль, который вызывает проблемы - он определяет продолжительность кеширования элемента в кэше памяти. Если установить его в ноль, срок действия этого элемента в кэше памяти никогда не истечет. В вашем случае это означало, что пользователи могли вернуться через несколько часов и продолжить доступ к вашему сайту. В нашем случае memcache заполнялся и вызывал удаление желаемых данных.

Я копал дальше, и все сводится к расширению PHP memcached. Начиная с версии 1.0.2 (которую мы запускаем) этот код гласит:

sess_lifetime = zend_ini_long(ZEND_STRL("session.gc_maxlifetime"), 0);
if (sess_lifetime > 0) {
    expiration = time(NULL) + sess_lifetime;
} else {
    expiration = 0;
}

В этом отрывке это ZEND_STRL ("session.gc_maxlifetime") , который не возвращает ожидаемое значение. Это было зарегистрировано как ошибка PHP, и исправление для библиотеки memcached описано на https://bugs.php.net/bug.php?id=59641 .

Я развернул этот патч, проверил сетевой трафик и обнаружил, что он устанавливает время истечения срока действия, как ожидалось.

В вашем случае это означало, что пользователи могли вернуться через несколько часов и продолжить доступ к вашему сайту. В нашем случае memcache заполнялся и вызывал удаление желаемых данных.

Я копал дальше, и все сводится к расширению PHP memcached. Начиная с версии 1.0.2 (которую мы запускаем) этот код гласит:

sess_lifetime = zend_ini_long(ZEND_STRL("session.gc_maxlifetime"), 0);
if (sess_lifetime > 0) {
    expiration = time(NULL) + sess_lifetime;
} else {
    expiration = 0;
}

В этом отрывке это ZEND_STRL ("session.gc_maxlifetime") , который не возвращает ожидаемое значение. Это было зарегистрировано как ошибка PHP, и исправление для библиотеки memcached описано на https://bugs.php.net/bug.php?id=59641 .

Я развернул этот патч, проверил сетевой трафик и обнаружил, что он устанавливает время истечения срока действия, как ожидалось.

В вашем случае это означало, что пользователи могли вернуться через несколько часов и продолжить доступ к вашему сайту. В нашем случае memcache заполнялся и вызывал удаление желаемых данных.

Я копал дальше, и все сводится к расширению PHP memcached. Начиная с версии 1.0.2 (которую мы запускаем) этот код гласит:

sess_lifetime = zend_ini_long(ZEND_STRL("session.gc_maxlifetime"), 0);
if (sess_lifetime > 0) {
    expiration = time(NULL) + sess_lifetime;
} else {
    expiration = 0;
}

В этом отрывке это ZEND_STRL ("session.gc_maxlifetime") , который не возвращает ожидаемое значение. Это было зарегистрировано как ошибка PHP, и исправление для библиотеки memcached описано на https://bugs.php.net/bug.php?id=59641 .

Я развернул этот патч, проверил сетевой трафик и обнаружил, что он устанавливает время истечения срока действия, как ожидалось.

и это сводится к расширению PHP memcached. Начиная с версии 1.0.2 (которую мы запускаем) этот код гласит:

sess_lifetime = zend_ini_long(ZEND_STRL("session.gc_maxlifetime"), 0);
if (sess_lifetime > 0) {
    expiration = time(NULL) + sess_lifetime;
} else {
    expiration = 0;
}

В этом отрывке это ZEND_STRL ("session.gc_maxlifetime") , который не возвращает ожидаемое значение. Это было зарегистрировано как ошибка PHP, и исправление для библиотеки memcached описано на https://bugs.php.net/bug.php?id=59641 .

Я развернул этот патч, проверил сетевой трафик и обнаружил, что он устанавливает время истечения срока действия, как ожидалось.

и это сводится к расширению PHP memcached. Начиная с версии 1.0.2 (которую мы запускаем) этот код гласит:

sess_lifetime = zend_ini_long(ZEND_STRL("session.gc_maxlifetime"), 0);
if (sess_lifetime > 0) {
    expiration = time(NULL) + sess_lifetime;
} else {
    expiration = 0;
}

В этом отрывке это ZEND_STRL ("session.gc_maxlifetime") , который не возвращает ожидаемое значение. Это было зарегистрировано как ошибка PHP, и исправление для библиотеки memcached описано на https://bugs.php.net/bug.php?id=59641 .

Я развернул этот патч, проверил сетевой трафик и обнаружил, что он устанавливает время истечения срока действия, как ожидалось.

10
ответ дан 2 December 2019 в 23:31

Теги

Похожие вопросы